息子が保育園に行くのを見てから就寝。 目が覚めるともう帰ってきていた。なんと夕方4時まで寝てしまったのだった。
何ヶ月かに一回、「Rubyにも(オプショナルな)型システムがほしい」というリクエストが来る。 大体はC++やJavaなど静的な型言語の経験がある人からのものである。曰く、
ま、わからんでもない。
が、元々は動的な型言語であるRubyにオプショナルな型を追加するのでは、 コンパイル時のチェックもさほど期待できないし、最適化も無理だろう。 となると、得られるメリットは最初のふたつということになる。 しかも、プログラムの読解には型よりもRDocなどによる適切なドキュメントの方が (嘘がなければ)より効果的だと思われる。
メリットばかりではない。通常、静的型システムはクラスをベースにして考える。
IO f
であれば、IOクラスまたはそのサブクラスのオブジェクトを受け付けるというような感じである。 ところが、これではfにStringIOオブジェクトを渡すことができなくなる。 StringIOはIOクラスと同じように振る舞うがIOのサブクラスではないからである。 つまり、たとえオプショナルでも静的型を導入することで柔軟性が減ってしまうということだ。 これは避けたい。
静的型言語では、多重継承やinterfaceを使って上記の問題を回避しようとしているし、 Rubyでもたとえばモジュールを使って解決可能ではあるが、 それでは手間が増えて嬉しさが減ってしまう。だったら最初からJavaを使えばよいんだし。
ところが、最近comp.lang.rubyで登場した提案は、 今までの「単なる静的型へのノスタルジー」をちょっと越えていた。 それは「型チェックをシグネチャで行う」ものだ。 これだと上記のデメリットがない。
もっとも、オプショナルとはいえ型システムは言語の性格を変える可能性があり、 しかも実装もそんなに楽ではない。 おまけにチェックによりパフォーマンスが低下する可能性が高いとなれば、 適切なエラーメッセージというメリットとのトレードオフを十分検討する必要があるだろう。
で、Jim Weirichからメソッド結合を使った提案が登場したのだが、 それについてはメソッド結合について解説してから取り上げよう。
追記
ツッコミにそれぞれ答えておこう。
まず、とんびさん。型があると補完ができるということですが、 Rubyはあまりに動的なのでオプショナルな型が少々あったくらいではお望みの補完は無理です。 プログラムの実行中にメソッドが増えたり減ったりすることが起きるのに適切な補完はできないでしょう。 逆にそこまで厳密でなくとも良いのならRDocの情報などをもとに補完するIDEは(原理的には)可能だと思います。
それから、mizuさん。offにするのはアリだとは思います。 ただ、オプショナルな型では穴が大きすぎでコンパイル時のチェックは行うことができず、 結局実行時チェックにならざるをえないことを考えると、どこまで嬉しいかどうかは疑問です。
mputさんのコメントはその通りなので、 最後、shugoさん。 こういうのをstructural conformanceというのか私はわからないのですが、 期待するメソッドを持っているかどうかだけでチェックし、継承関係を見ないという点では structural conformanceと呼べるかも。structuralという単語からは 「オブジェクトの構造(≒インスタンス変数など)」の方を連想しちゃうけど。
通称『ゴジラvs沢口靖子』。先日、NHK BSで放送されたものの録画。
平成ゴジラの2作目で、脚本は確か公募だったはず。 ちょっと素人っぽい印象があってなんだかなあって話ではある。 先日の『怪獣総進撃』(1968)の方が工夫があった気がする。
しかし、興味深い点もあった。
後者は「火星軌道にはいつも火星がある」と同様に、 えせ科学の思いこみのひとつかもしれない。 クローン人間が記憶や意識までコピーしちゃうのも同類だよな。 実際には一卵性双生児以下の関係しかないのだろうに。
「B00029DDWQの50年ぶりのリメーク」などというコピーに惹かれてレンタルしてみる。
まず、すぐに気がつくことは、そのコピーが間違いであること。 なによりタイトルからして違う。チャールトン・ヘストンの『十戒』(1956)の原題は 『The Ten Commandments』だが、この作品は『Moses』である。 なんのことはない、同じ旧約聖書を原作にして作られた映画ではあるが、 この二本の映画には直接の関連はない。
さて、実際に見てみると、私は『Moses』の方が好みであった。 ただ、人によって好みは別れるかもしれない。
『Moses』は旧約聖書の記述にかなり忠実である。 『The Ten Commandments』ほどドラマ仕立てが少ないので、 ドラマティックな盛り上がりでは負けている。 しかし、聖書にある通り「口が重いもの」として描かれるモーセにはリアリティがある、 っていうか、チャールトン・ヘストンかっこよすぎっ。
ばりばりの特殊効果に頼ることもなく、モーセ、アロン、ヘブル人、そしてファラオなど、 それぞれの気持ちの動きを描いていく様子も好感が持てる。 また、222分という時間にもかかわらず、唐突に終わってしまう『The Ten Commandments』に対して、 『Moses』はレビ記の終わり、モーセの最期まで(わずか120分で)描き切っている。
ただ、カットワークがあまり上手でない。突然の暗転がこれほど多用されると学芸会みたい(特に後半)。 あと、いくつかの部分が説明されないので、一緒に見ていた子供たちには補足説明が必要であった。 なんで40年も放浪する必要があったのか、とか。
それでも旧約聖書(出エジプト記からレビ記まで)を読んだことがある人には、 こっちの方がお勧めかな。
主演は『ガンジー』も演じたベン・キングスレー。 クリストファー・リーも冒頭ちょっとだけ登場。 しかし、クリストファー・リーはいい感じに歳をとったせいか、 あちこちの映画で見かけるようになったなあ。 そのうち「ドラキュラ」なんて言われなくなるに違いない。 本人もそれが望みだろう。
Paul Grahamから「新しいエッセイ」を見てくれないか、とのメールをもらう。 日本(やヨーロッパ)とアメリカを(ハッカー的見地から)比較するというエッセイであったが、 いくつかの事実誤認と、同意できない点があったので指摘するメールを書く。
Eric Raymondからも同じような指摘が来ていた。うーむ、銃だけでなく刀にも興味があったのか。
日本サイドからはこんな記事も見付けた。これもちょっと違うような気がする。
追記:
エッセイは公開されたらしい。 が、Acknowledgmentに私の名前はない。がっかり。Blurbも使われなかったしな。
ワード評議会があったのだが、 子供の支度をさせたりしてたら結局出席できなかった。 妻、息子、末娘の三人は留守番。
今日は、聖餐会でプライマリーの発表があった。 子供達によるなかなかかわいらしい発表であった。 息子は昨日の音楽祭に引き続き参加できなくて残念。 彼の発表部分は私が原稿を代読した。
御世話をした妹の話によると直前までなかなか準備が進まなくて どうなることやら、と思ってたらしい。 そうは見えなかったな。本番に強い子供達。
次女はナレーターをしたり、大活躍であった。
取材を受ける。
わざわざ松江まで来てくださって、ありがたい。 で、Rubyの歴史から、私の個人的なことまで、 とりとめのないことをつらつらと話したが、 これをどういう風に料理してくださるのか楽しみである。
金曜日、一日ロスした原稿に取り掛かる。
まあ、わずか2ページなので、あっと言う間に書きあがるが、 また書きすぎてしまい、かなり削る。
なんか最近そういうのが多い。
公表される。
笹田くんは3度目の当選。おめでとうございます。
しかし、未踏も回を重ねるにつれ、トンがったのが減ったような気がするのは気のせい? もうちょっと冒険したものも見たい気がする。
結局完成しないのも切ないけど。
先日行われた「関西オープンソース」のレポート。大変有意義だったらしい。
今年は運営が大変だったと聞くけど、 東京中心になりがちなオープンソース界で、 関西で定期的にイベントが開かれる意義は大きいと思う。
ぜひ継続していただきたい。
新鋭SmalltalkことSmallscriptの父、David Simmonsが マイクロソフトと開発中の「次世代Smalltalk」S#について語る。
って、S#の実態はよくわかんないんだけど。
ついでにRubyやDについても語ってくれちゃっている。
このDavid Simmonsは、ものすごい自信に満ちあふれた人で、 一緒にいるとちょっと疲れちゃうところもある。 しかし、その広範な知識と、実績と、頭の回転の速さはホンモノである。
で、彼がずっと以前からSmallscriptで実現している Selector Namespaceがいまだに理解できてない*1私は、 当面彼にかないそうにないなあ。
*1 Classboxはなんとか理解できた