[Yarv-devel] GC Tech. on Script Lang.

K.Sasada ko1 @ namikilab.tuat.ac.jp
2004年 2月 9日 (月) 20:55:56 EST


  matz at ruby-lang.org (Yukihiro Matsumoto) wrote :
    [ Re: [Yarv-devel] GC Tech. on Script Lang. ]
    at Mon, 09 Feb 2004 20:26:17 +0900

 ささだです。

> やりません。Stringクラスの+メソッドか再定義されない保証がな
> いので。動的な言語はこれだから。(苦笑)

 String#+ とか、 Fixnum#+, ... はきっと書き換えられないだろう、という予
測の下で、定数畳み込みみたいなことをやってしまう。でも、書き換えられたら
やばいので、保険としてその命令列のを String とか Fixnum に登録しておく。
万が一String や Fixnum が書き換えられたら(もしくは、String#+ や 
Fixnum#+ のような誰も手をつけねーだろ、っていうメソッドを書き換えちゃっ
たら)登録した全ての命令列を(定数畳み込みなしで)最適化しなおす。

 ということを考えていたんですが、どれくらい効果が出るかわかりませんね。
というか、多分報われない。

 定数にも同じようにフックかけてやれば、それは結構効果があると思うのです
が。定数の再定義なんてあんまりしないよね? ね?


if(DebugNantoka)
  debug_print ...
end

 個人的に、こういうのを消したいんですよ。これのために、私は ruby でこう
いうの埋め込むのをためらってしまって。

 非常に安易だけどやられてないってことは(聞いたことが無いだけかも)、や
っぱり効果がないんでしょうか。

問題:畳み込んだ命令列実行中、String#+ などを再定義されたとき、処理が復
帰できますか?(命令位置の補正ができますか?)

-- 
// SASADA Koichi @ namikilab.tuat.ac.jp
//



Yarv-devel メーリングリストの案内