動的型・静的型と型推論

「動的型」「静的型」「型推論」「(型)安全(性)」等の用語は混乱が多いようなので、前に(僕が知る限りのことを)まとめてみたのですが、またちょっと立て続けに混乱を目撃してしまったので少しだけ書いてみる。何か勘違いしていたらツッコミplz。

プログラムの実行前に型検査をする「静的型つき言語」(statically typed languages)には、型注釈が必須な「陽な型つき言語」(explicitly typed languages)と、省略しても型推論される「陰な型つき言語」(implicitly typed languages)の二つがあります。前者はCとかJavaとかで、後者はMLとかHaskellとかです。MLやHaskellは「陰な型つき関数型言語」ですが、さらにOCamlは「陰な型つきオブジェクト指向言語」にもなっていて、結果としてstatically typedなのにduck typingと同様の機能が実現されています。

ちなみに、(上のリンク先にもある)有名な"inheritance is not subtyping"問題は、実装の継承がある限り、動的型つき言語でも静的型つき言語でも(さらに陰な型つき言語でも陽な型つき言語でも)起こりえます。

…記事の宣伝じゃないっすよ。いや、本当に。(^^;