ささだです。

Yukihiro Matsumoto wrote:
> |rb_yield を連続で呼び出すときに、積んだフレームを使いまわす関数を書きました。
> |試験的に Fixnum#times にだけ組み込んでいますが、ほかにも
> |Array#each, Range#each などで使えると思います。
> |
> |ruby -e 'GC.disable;t=Time.now;(10**7).times {};p Time.now - t'
> |こんな感じの簡単な計測では 4.9秒から 3.5 秒ほどに縮まりました。
> |一応手元では make test と make test-all の動作を確認してあります。
> 
> 非常に興味深いのですが、ささだくんはブロックに関して別の考え
> があるかもしれません。彼が賛成したら取り込みましょう。

 昔、こういう機能を入れていました。が、block inlining (BI) のほうが
いいだろう、と思って思い切って削ったんですが、BI を実装するのは色々
と難しいのでちょっと現実的じゃないなぁ、と思い直してきました(BIの残
骸は残っていますが、多分まともに動きません)。

 というわけで、やっぱりこういう仕組みが良いのではないか、という意見
です。複雑度は上がるのですが、それでとくにまつもとさんが問題ないので
したら、ソースを見てから、コミットさせていただきます。

 気になった点としては、cfp を直接 ++ などで操作するのはまずいかな
(マクロを使ってください)とか、そのあたりです。あと、Ruby には嫌な
例外が沢山あるので、そのあたりを確認させてください。

 ちなみに、ベンチマークは make benchmark で確認できます。ご利用くだ
さい。

-- 
// SASADA Koichi at atdot dot net