オブジェクト指向な言語は型安全にならない
http://www15.ocn.ne.jp/~rodinia/Blog/MyJournal12.html#categoryocaml1
の話がやっと理解できた気がする.
down castがあるかぎり型安全にはならない.そしてdown castなしでは,OOな言語ではプログラムが書きにくい.つまり,C#やJavaは型安全になれない.確かにそうだ.しかしOCamlは,直和型があるから,そういうプログラムも型安全になりますよ,と.
だからといって,直和型で表現する言語の方が偉いかといえば,そういうことはないと思う.OOな言語のように「クラスを継承して,自分のクラスを作成すればOK.もとのクラスには手を付けなくて良い」という言語の方が,使いやすい面も多いと思うから.
AのオブジェクトをBにキャストするときに,本当にBがAのサブクラスになっているかどうかぐらいのチェックはできるだろうけど,それで問題が解決するかというと,別に解決しない.やっぱり実行時に型エラーが出る可能性は,排除できないから.
型安全性をとるか,プログラムの拡張性をとるか.痛し痒しである.
型安全なdown castの実装は無理な気がする.拡張性の高い,直和型の実装はできるだろうか?直感的に無理な気がするが,(型安全なdown castよりは)考えてみる価値はありそうな気がする.考えてる人がいる気もする.