N-gram 方式の全文検索システムRastのソースコードがとうとう公開された。 ここ数ヶ月の後輩たちの成果を見てやってほしい。 ただ、まだ最終版からはほど遠いのでお手柔らかに。
OSCON 2005へのプロポーザルが採択された。 テーマは「Yield to the Block: The Power of Blocks in Ruby」とするつもり。 Rubyの特徴であるブロックの活用方法をいろいろと語る45分のセッション。
さて、これで行く方法を算段しないといけなくなったな。 夏休み期間にアメリカ行くのにどのくらいかかるかな。
ごく当たり前のことが書いてある。 ただ、翻訳はあんまり良くないような。「?」と思ったら原文を参照。
Rubyではレシーバが省略された関数的形式で呼ばれたメソッドはselfのメソッドと見なされる。 ただし、privateと設定されたメソッドがエラーにならないという違いがある。
これはこれで便利なものだが、ちょっとだけ欠点があって、 単にユーティリティとして使いたい関数的メソッドで名前空間が消費されてしまう。 ただ単に手続きをまとめるためにだけ作ったメソッドでも、 重複するといけないのでサブクラスで同名の関数を使うことはできない(正確には可能だが、トラブルになる)。
そこで、関数形式で呼ばれたメソッド呼び出しでは、メソッド探索を当該クラスからはじめる、 というのはどうだろう。仕様はより複雑になるが、再定義されたメソッドを利用しないので、 サブクラスの都合によりメソッドの動作が変化してしまう事態や、 メソッド名が偶然衝突してしまう危険性を避けることができる。
当該クラスからのメソッド検索に必要な枠組みはすでにsuperの実現のために用意されているので、 実装もそんなに難しくないはずだ。
仕様が複雑になることと、関数的メソッドをオーバライドできないこと、がデメリットだが、 そんなに悪い取り引きではないと思う。
1.9で実装してみようかなあ。
RubyをPHPやJavaと比較するという話。
「Ruby is too easy to be used as a first language」という観点は面白い。 つまり、最初Rubyでプログラミングを学んでしまった人は、 それがあまりに楽で簡潔なので、 他の言語に移行する時の学習曲線が急勾配になりすぎるということ。
そういわれれば、そういうこともあるかもしれない。 私だってRubyでプログラミングを学んだわけじゃないものなあ。
しかし、同じ論理はより強力に「なでしこ」や「ドリトル」にもあてはまりそうな気がする(HSPにも?)。 これらの言語で学んでしまった人は他の言語に移行するのが大変になるかもしれない。 ずっとその言語で閉じていればいいけど、いざ他の言語が必要になったら...。
いや、人間の柔軟性はそれくらいなんなく克服するのだろう....と、信じたい。