DelegateRubyBlock

2004-01-26 02:40:19 +0900 (1678d); rev 1

Rubyのブロックを委譲するときは &block で受けて &block で渡すとよい。

def m(&block)
  iter(&block)
end

def iter
  yield 1; yield 1; yield 1
  yield 1; yield 1; yield 1
  yield 1; yield 1; yield 1
end

速度比較

direct間接層なし
&block&block で受けて &block で渡す
yield全部 yield を使う

GCあり

% ruby-1.6.8 t
direct    : 0.620000 sec
&block    : 0.920000 sec
yield     : 1.270000 sec

% ruby-1.8.1 t
direct    : 0.590000 sec
&block    : 0.890000 sec
yield     : 1.300000 sec

% ruby -v t
ruby 1.9.0 (2004-01-22) [i686-linux]
direct    : 0.550000 sec
&block    : 0.860000 sec
yield     : 1.200000 sec

GCなし

% ruby-1.6.8 t
direct    : 0.580000 sec
&block    : 0.760000 sec
yield     : 1.070000 sec

% ruby-1.8.1 t
direct    : 0.550000 sec
&block    : 0.790000 sec
yield     : 1.090000 sec

% ruby -v t
ruby 1.9.0 (2004-01-22) [i686-linux]
direct    : 0.530000 sec
&block    : 0.720000 sec
yield     : 1.020000 sec

system revision 1.162