今日は妻の誕生日。なのにダンナはアメリカにいるわけで、 不興を買っているわけである。 日本時間の8日にSkypeしたんだが、ぜんぜん通じないのである。 この辺、電話にはまだかなわない。
さあ、どうやって機嫌を取ろうかな。
今日はSunキャンパスのEBC(Executive Briefing Center)で Full-day Meeting。ここが本社だと思ってたんだけど、 登記上の本社は別にあるのだとか。
で、いろいろな「偉い人」から
などを聞いた。ここでしか聞けないすごい濃い内容であった。 詳細なレポートを書きたいが、それにはこの余白は(ry
また、後でまとめたい。できれば。もうだいぶ忘れてるけど。
特記すべき点はみっつ。
参考: この日のミーティングに関するTim Brayのブログ。
明日にはもう帰国するので今夜が最後のアメリカでの夕食になる。 で、連れて行ってもらったのはCrusatceamという店。
で、カニ。
見たことないほど巨大なものが一人一人の皿に配られるのは圧巻であった。 バジルとオリーブオイルで炒めたものらしい。日本では見かけない味つけ。 意外(?)なことにおいしかった。
今日は今回の旅行のひとつのハイライトと言ってもよい。 あ、いや、Sunの訪問がね。
で、カニを食べながら隣に座っていた Charles NutterとRubyの可視性(visibility)やUnicode対応について 熱く語ったのであった。正直、ここまでRubyそのものの話ができる機会は 日本でもなかなか無い。
で、Charlesと話したことのメモ。
private visibilityが必要になるのは、 ローカルなルーチン(関数 or メソッド)の名前がpublicなメソッド名と偶然衝突することを避けるため。
で、組み合わせとしては以下のような場合がある。
スーパークラスとサブクラスで同名のメソッドがあり、 それぞれの可視性の組み合わせの可能性は(左がスーパークラス)、
である。ここで4は通常のオーバーライドなので問題なし。 1と2に関してはすでに解決策がある(functional styleではオーバーライドしない)。
で、残る問題は3。私の元の案では、 privateを先に検索してからpublicを検索することにしていた。 しかし、これについてはCharlesから
という指摘が。前者はメソッドキャッシュでほぼ軽減されるとは言え、 指摘はもっともだ。で、ここまでで悩んでいたのだが、 今回、カニを食べながら、Charlesが 「でもさ、無理に解決しようとするから難しいんで。 Javaならpublic × privateはそもそもエラーだぜ。 Rubyでもエラーでいいんじゃね(意訳)」という指摘が。
まったくだ。どうしてそれに気がつかなかったんだろう。 一種の視野狭窄か。
「public × private」がエラーなり警告なりで存在しない (あるいは承知でやっている)と見なすことができればシステムがずいぶん簡単になりそう。
あとでもうちょっと考えてみよう。
あと、Unicode対応では、以前の案からencoding=メソッドをなくすことにした。 つまり、ある文字列のエンコーディングは動的に変更できないということ。
変更するためにはString#encodeメソッドを使って新しい文字列を作る。 おそらく性能のため実装はcopy-on-writeを使うことになるだろうけど。
というのも、JRubyではBinary StringとUnicode Stringで クラスを分離したい(少なくとも内部的には)というニーズがあるようだ。 となると「普通の言語」ではオブジェクトのクラスを動的に変更するのは難しいので エンコーディングは変更可能でない方がありがたいことが多いだろうということ。