«前の日記(2006年07月19日) 最新 次の日記(2006年07月21日)» 編集

Matzにっき


2006年07月20日 [長年日記]

_ [Ruby] local visibility

今日も市街が混雑しているのは明らかなので、自宅作業にする。

で、しばらく前から1.9に導入していたlocal visibilityにバグがあったのを修正する。 local visibilityとはpublic, private, protectedと同様に、localと指定すると

  • そのメソッドは関数形式でしか呼び出せない(ここはprivateみたい)
  • サブクラスでoverrideさていても、現在のクラスのメソッドが呼ばれる

というものだ。でも、メソッドキャッシュのことを忘れていたよ。

というわけで、修正した

Fri Jul 21 04:17:22 2006  Yukihiro Matsumoto  <matz@ruby-lang.org>
  • eval.c (rb_call): try local method look-up first for fcall, then normal method look-up. [ruby-talk:202564]

とはいえ、これだと普通の関数的メソッド呼び出しと区別がつかないので、 関数的メソッド呼び出しのコストが若干上昇することになる。 いっそ「@methodはローカル関数」のようなルールを導入した方が 実行効率からは喜ばれるだろうな。

_ The Problem with Threads

タイミングにより挙動が非決定的(non-deterministic)になるスレッドは難しすぎる、 という話、らしい。

ではどうするかというと、適切なデザインパターンの導入により、 決定的なままで並列性を導入することはできるだろうということと、 それを支援する言語についても触れられている。

Guy SteeleのFortressもその辺を意識している(ループを暗黙的に並列実行したり)ようだ。

が、そういう言語ってのは以前からぽつぽつ出ているように思うのだが (OccamとかpSatherとか)、あまりメジャーにならないのはなぜだろう。 まだまだ経験が足りなく、こなれていないからだろうか。 将来のメニーコアを最大限に活用する並列実行環境にふさわしい言語になると思うのだが。


«前の日記(2006年07月19日) 最新 次の日記(2006年07月21日)» 編集