Rubyの型推論

先輩からこういう発表があるのを教わった.

多相型レコードに基づくRubyオブジェクトの型推論に関する考察

松本 宗太郎(筑波大学 システム情報工学研究科)
南出 靖彦(筑波大学 システム情報工学研究科)

松本さんのwebサイトに置いてある(別のセミナーでの)発表資料を見ると,Ocamlの型機構を参考にしているらしい.しかしRubyは標準ライブラリでも動的な性質を使いまくっている.例えばHTML生成ライブラリ*1においては,未束縛の変数すらエラーではない.HTMLの仕様にある ultable をライブラリ内で一々定義しておらず,普通ならエラーになる「ul という名前のメソッドが呼ばれた」ときはそのことをキャッチするルーチンで引数 "ul" に対応する処理を行うのだ.(追記: これは間違い.cgi.rbでは method_missing でなく eval を使っている.どちらにせよリフレクションの一種だが.)

これが "cool" かどうかはともかくとして,Rubyは「そういう言語」なのだ.Ruby型推論と相性最悪なのは明らかだ.どんな「明らかな誤り」も「動的な性質を使って対処することを意図したプログラミングスタイル」かも知れない.そして「そういうスタイルは処理系が困るから止めてね」「処理系が把握できる範囲で遊んで下さい; その『範囲』がどんどん広がるようがんばってます」というのが静的派閥の言い分だよね.大違いだ.
別に難癖を付けるつもりはなくて(否定してかかるのは萌芽的な研究に対して非常に悪い態度である),ぜひ橋渡しの知見をたくさん得ていただきたいと期待する私だが,思いついたのは「静的言語はソースプログラムのみが主体,動的言語はプログラムと処理系を合わせたものが主体」と言えるんじゃないかってことだ.

*1:まぁ個々のDOM要素に対応するメソッドが文字列を返すようなこんな腐れライブラリなど消えてもらって構わないのだが.結果はツリーで返して最後でトラバースしつつ文字列化もしくは印字すべきだろうが!