Rubyの型推論
先輩からこういう発表があるのを教わった.
- http://www.score.cs.tsukuba.ac.jp/~soutaro/ 松本さんのwebサイト
松本さんのwebサイトに置いてある(別のセミナーでの)発表資料を見ると,Ocamlの型機構を参考にしているらしい.しかしRubyは標準ライブラリでも動的な性質を使いまくっている.例えばHTML生成ライブラリ*1においては,未束縛の変数すらエラーではない.HTMLの仕様にある ul
や table
をライブラリ内で一々定義しておらず,普通ならエラーになる「ul
という名前のメソッドが呼ばれた」ときはそのことをキャッチするルーチンで引数 "ul"
に対応する処理を行うのだ.(追記: これは間違い.cgi.rbでは method_missing
でなく eval
を使っている.どちらにせよリフレクションの一種だが.)
- http://blade.nagaokaut.ac.jp/cgi-bin/vframe.rb/ruby/ruby-talk/40902?40784-41258 method_missing is cool (was: are there unit tests for cgi.rb?)
これが "cool" かどうかはともかくとして,Rubyは「そういう言語」なのだ.Rubyが型推論と相性最悪なのは明らかだ.どんな「明らかな誤り」も「動的な性質を使って対処することを意図したプログラミングスタイル」かも知れない.そして「そういうスタイルは処理系が困るから止めてね」「処理系が把握できる範囲で遊んで下さい; その『範囲』がどんどん広がるようがんばってます」というのが静的派閥の言い分だよね.大違いだ.
別に難癖を付けるつもりはなくて(否定してかかるのは萌芽的な研究に対して非常に悪い態度である),ぜひ橋渡しの知見をたくさん得ていただきたいと期待する私だが,思いついたのは「静的言語はソースプログラムのみが主体,動的言語はプログラムと処理系を合わせたものが主体」と言えるんじゃないかってことだ.
*1:まぁ個々のDOM要素に対応するメソッドが文字列を返すようなこんな腐れライブラリなど消えてもらって構わないのだが.結果はツリーで返して最後でトラバースしつつ文字列化もしくは印字すべきだろうが!