タグ

ブックマーク / sumii.hatenablog.com (2)

  • 型推論と型検査、静的な型つけと動的な型つけ、強い型つけと弱い型つけ - sumiiのブログ

    ついでに追加。 型推論:変数や式の型をプログラマが宣言しなくても、言語処理系が文脈から推論してくれる機構。MLとかHaskellとか。 型検査:変数や式の型が合っていることを言語処理系が(普通は静的に)チェックしてくれる機構。CとかJavaとか、MLやHaskellも。 静的な型つけ:プログラムの実行前に型を検査する機構。MLとかHaskellとかCとかJavaとか。 動的な型つけ:プログラムの実行中に型を検査する機構。LispとかSchemeとかPerlとか。 強い型つけ:検査を通れば、安全さ(safety)が保証される、という(普通は静的な)型つけ。MLとかHaskellとかJavaとか。Javaはバグがあったりしたので少し怪しいですが。 弱い型つけ:検査を通っても、安全さ(safety)は保証されない、という型つけ。CとかPascalとか。 安全さ(safety):プログラムが言語仕

    型推論と型検査、静的な型つけと動的な型つけ、強い型つけと弱い型つけ - sumiiのブログ
    mukaken
    mukaken 2019/04/16
  • ML多相の続き - sumiiのブログ

    さて、Wrightの論文の当時は、value restrictionは妥当な制限だった。なぜならば、value restrictionのせいで型付けできなくなる主なケースは、多相関数の部分適用がまた多相関数になる(はずの)場合ぐらいで、それはlet x = eのeをfun y -> e yのように書き換えること(η展開)で回避できたからである。 ところが、SML#のような多相レコード、OCamlのような多相オブジェクトないし多相バリアントを利用すると、value restrictionが当に問題になってくる。たとえば # let f x = `V x ;; val f : 'a -> [> `V of 'a ] = <fun> # let v = f 1 ;;などで、vがpolymorphicにならないとしたら、「(実質的に)多相バリアントを返す関数は書けない」ことに(事実上)なってしま

    ML多相の続き - sumiiのブログ
  • 1