[Yarv-devel] block optimization

K.Sasada ko1 @ namikilab.tuat.ac.jp
2004年 2月 9日 (月) 21:17:58 EST


 ささだです。

 さかいさんを無理やり登場させてしまいます。

[ruby] Re: ブロック
http://web.sfc.keio.ac.jp/~s01397ms/d/?date=20040204#p03

 てな話がありました。


def m
  x = y = 1
  Proc.new{|a,b| a+b}
end

pr = m()
p pr.call(1,1) #=> 2


 のとき、無駄に x,y を保存しますが、ホントはいらねっす。多分。
 でも、


def m
  x = y = 1
  Proc.new{|a,b| eval("x+y")}
end


 なんてあったりすると厄介なんで、迂闊に捨てられません。多分。


 eval が他の名前かもしれないし、コンパイル時に静的に決定で
きません。動的にメソッドが変更する可能性があるので、やっぱり
捨てられません。

 泣き寝入りするしかないのでしょうか。


 あ、そもそも、

def m
  x = y = 1
  Proc.new{|a,b| a+b}
end
pr = m()

p eval("x+y", pr) #=> 2


 なんてできるので、やっぱり無理か。

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



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