息子が保育園に行くのを見てから就寝。目が覚めるともう帰ってきていた。なんと夕方4時まで寝てしまったのだった。[Ruby]Rubyの型システム何ヶ月かに一回、「Rubyにも(オプショナルな)型システムがほしい」というリクエストが来る。大体はC++やJavaなど静的な型言語の経験がある人からのものである。型があると適切なエラーメッセージが得られる型があると型情報をヒントにしてプログラムが読みやすい型があるとコンパイル時にエラーが検出できる型があると最適化のための情報が手に入るま、わからんでもない。コンパイル時のチェックもさほど期待できないし、最適化も無理だろう。なると、得られるメリットは最初のふたつということになる。(嘘がなければ)より効果的だと思われる。メリットばかりではない。通常、静的型システムはクラスをベースにして考える。fであれば、IOクラスまたはそのサブクラスのオブジェクトを受け付けるというような感じである。ところが、これではfにStringIOオブジェクトを渡すことができなくなる。StringIOはIOクラスと同じように振る舞うがIOのサブクラスではないからである。オプショナルでも静的型を導入することで柔軟性が減ってしまうということだ。それでは手間が増えて嬉しさが減ってしまう。最初からJavaを使えばよいんだし。今までの「単なる静的型へのノスタルジー」をちょっと越えていた。それは「型チェックをシグネチャで行う」ものだ。これだと上記のデメリットがない。実装もそんなに楽ではない。適切なエラーメッセージというメリットとのトレードオフを十分検討する必要があるだろう。それについてはメソッド結合について解説してから取り上げよう。追記ツッコミにそれぞれ答えておこう。Rubyはあまりに動的なのでオプショナルな型が少々あったくらいではお望みの補完は無理です。プログラムの実行中にメソッドが増えたり減ったりすることが起きるのに適切な補完はできないでしょう。逆にそこまで厳密でなくとも良いのならRDocの情報などをもとに補完するIDEは(原理的には)可能だと思います。それから、mizuさん。offにするのはアリだとは思います。結局実行時チェックにならざるをえないことを考えると、どこまで嬉しいかどうかは疑問です。最後、shugoさん。conformanceと呼べるかも。「オブジェクトの構造(≒インスタンス変数など)」の方を連想しちゃうけど。