«前の日記(2007年01月03日) 最新 次の日記(2007年01月05日)» 編集

Matzにっき


2007年01月04日 [長年日記]

_ [Ruby] Headius: New JRuby Compiler: Progress Updates

ホリデーシーズンにJRubyはちゃくちゃくと進化中、という話。

実際にServer VMを使った場合には、 場合によってはC Rubyに比肩しうる性能が出る(こともある)ということだ。

今までは「Bignum計算なら速い」とか、JRuby自身の性能によるものではない 点でしか性能勝負はできてなかったんだけど、 今回はわりとアグレッシブな最適化(再定義されてない整数メソッドの直接呼び出しとか)を 行ったようだ。

JRubyってのは非常に面白いポジションにいると思うんで、 かれらの頑張りには今後も期待したい。

_ [Ruby] ユメのチカラ: マルチプロセッサ向けソフトウェアパラダイムとは?

この間のメニーコアのエントリを連想させる内容。さらに吉岡さんのはてな日記の方では

Rubyあたりでマルチコアに対応した実装をハックしちゃうというのも面白いかなあなどと妄想しているがあくまで妄想である。そこの人、本気にしないように。

とある。いやあ、私もそういうの欲しいなあ。 私自身は並列は得意じゃないので、できそうにないけど。

そういえばささだくんの専門はそっちだったっけか。

_ [Ruby] Class Variables

落とし穴」のエントリ以来、 ずっと考えていたのだが、ようやっと結論が出たような気がする。

今までクラス変数は、登場した場所を囲むもっとも内側のクラス(ただし、特異クラス定義は除く)に所属する、というのがルールであった。 変数がどのクラスに所属するかは静的に決定した方が分かりやすいだろう という判断からである。

しかし、「落とし穴」と呼ばれるからには、この判断は間違っていて ユーザの暗黙の期待を裏切っている(悪い驚き)である可能性は否定できない。

新しいルールはこういう風にしようと思う。

  1. メソッド内部のクラス変数はそのメソッドを定義するクラスに所属する。 特異メソッドの場合には特異クラスに(1.8とは非互換)。
  2. クラス定義内部のクラス変数は定義中のクラスに所属する
  3. クラス変数の参照(とdefined?チェック)において、 そのクラスに当該の名前のクラス変数が定義されていなければ、 a) そのクラスがクラスの特異クラス(メタクラス)ならば、 そのクラスとさらにそのスーパークラスを検索する。 b) そうでなければ最初のクラスのスーパークラスを検索する(現状の1.9ではエラー)。
  4. 代入では、スーパークラスにさかのぼらない。 スーパークラスで同名のクラス変数が定義されていても自クラスに代入する。 サブクラスからはクラス変数は更新されない

こうやって文章にすると結構複雑なのだが、どうやらこれが多くの人が暗黙に期待するルールに一番近いようだ。


«前の日記(2007年01月03日) 最新 次の日記(2007年01月05日)» 編集