型検査と型推論

型検査と型推論の違い、そして型推論の意味
12
山本和彦 @kazu_yamamoto

wikipedia の型安全の説明もイマイチだなぁ。

2011-05-02 18:21:19
山本和彦 @kazu_yamamoto

そうか! Java なんかを見て、「型なんか書きたくない」と思うのか。。。

2011-05-02 18:24:35
山本和彦 @kazu_yamamoto

そして、「Haskell では型推論があるから型を書かなくてもいいよ」と不適切な説明をしてしまう。

2011-05-02 18:25:10
山本和彦 @kazu_yamamoto

適切な説明は「Haskell では型を簡潔に書けるので、トップレベルの関数には書きましょう。ローカル関数は、(型推論があるので)型は書かなくてもいいでしょう。」でしょうね。

2011-05-02 18:26:33
山本和彦 @kazu_yamamoto

「動的型付けだと、型を書かなくてもよく、コードがすっきりするので、バグは入り込みにくい」という主張には、型を書くのは面倒だという思い込みがあるんですね。

2011-05-02 18:27:54
山本和彦 @kazu_yamamoto

僕も public static void なんて型は書きたくないよ。

2011-05-02 18:28:54
Jun Furuse @camlspotter

ありえねー、参考までにソースはありますか? QT @kazu_yamamoto: 「動的型付けだと、型を書かなくてもよく、コードがすっきりするので、バグは入り込みにくい」という主張には、型を書くのは面倒だという思い込みがあるんですね。

2011-05-02 18:36:32
Nobuo Yamashita @nobsun

型推論があるからこそ型を書く.型推論がないのに型を書かされるのは嫌だな.という体験が必要かもしれないね.

2011-05-02 18:38:43
山本和彦 @kazu_yamamoto

.@nobsun 御意。あと、すべてが式だという意味をもっと伝えないと!

2011-05-02 18:42:00
Jun Furuse @camlspotter

ウィキペか…まったくだな QT @kazu_yamamoto: .@camlspotter ここに、そう書いてありました。 http://goo.gl/rFlbl

2011-05-02 18:54:17
山本和彦 @kazu_yamamoto

型検査とは、外部から推論した型と内部から推論した型が一致するか確かめること。で、OK?

2011-05-02 19:07:34
Jun Furuse @camlspotter

厳密に型検査と言うときには推論は入っちゃいけないと思います QT @kazu_yamamoto: 型検査とは、外部から推論した型と内部から推論した型が一致するか確かめること。で、OK?

2011-05-02 19:18:14
山本和彦 @kazu_yamamoto

.@camlspotter 関数の型が書かれていないとき、その関数の外部からの型は、使われる文脈から推論して決めるのではないですか?

2011-05-02 19:21:38
Jun Furuse @camlspotter

Γ |- e : τ が与えられたときそのデリベーションを探すのが型検査。Γ と e が与えられたときに型検査に通るような τ を探すのが型推論。嘘だったらゴメンナサイネー;;

2011-05-02 19:23:40
Jun Furuse @camlspotter

それは型推論してるじゃないですか。 QT @kazu_yamamoto: .@camlspotter 関数の型が書かれていないとき、その関数の外部からの型は、使われる文脈から推論して決めるのではないですか?

2011-05-02 19:27:11
Jun Furuse @camlspotter

私的にはバッキバキに型がアノテーションとして付けられてるコードを見て、うん、おかしなところは無いね、安全だね、というのが型検査です;;

2011-05-02 19:29:21
Jun Furuse @camlspotter

たとえば C は型検査がありますが、型推論はない。x の型がわかってれば *x の型は自明とか、そういうのはバッキバキの内でお願い致します;;

2011-05-02 19:31:45
おしいれのぼうけん @osiire

@kazu_yamamoto たぶんWikipediaの記述を直されようとしているのですよね?「型による制限を検証し、実施する処理は型検査と呼ばれ、」は「型付けされたプログラムが型付け規則に従っているかを検証する処理は型検査と呼ばれ」くらいでどうでしょう?

2011-05-02 19:31:56
山本和彦 @kazu_yamamoto

.@osiire いえ、僕は Wikipedia に書いたことはありませんし、直そうとも思っていません。。。

2011-05-02 19:33:19
おしいれのぼうけん @osiire

@kazu_yamamoto あっ、そうでしたか、すみません...。

2011-05-02 19:34:31
山本和彦 @kazu_yamamoto

.@camlspotter えー。すると、OCaml には型推論はあるが、型検査はないのですか?

2011-05-02 19:35:06
山本和彦 @kazu_yamamoto

今、the implementation of functional languages を読んでいるのです。。。

2011-05-02 19:35:59
Jun Furuse @camlspotter

QT @camlspotter: 一方 (λx.x) "hello" と書かれているときに、うーん、取り敢えず x は文字列ですかねえ、というのは型推論してる。(こういうとき 42 とか書くとハスケルの人がメンドイ(ノ≧∀≦)ノ;;

2011-05-02 19:36:44
Jun Furuse @camlspotter

型推論が健全なら型検査は必要ないっ!!(キリッ QT @kazu_yamamoto: .@camlspotter えー。すると、OCaml には型推論はあるが、型検査はないのですか?

2011-05-02 19:38:36