< :前の番号
^ :番号順リスト
> :次の番号
P :前の記事
N :次の記事(自分と同じ返事先を持つ)
|<:スレッドの先頭
>|:次のスレッド
^ :返事先
_:自分への返事
>:同じ返事先を持つ記事(前)
<:同じ返事先を持つ記事(後)
---:分割してスレッド表示、再表示
| :分割して(縦)スレッド表示、再表示
~ :スレッドのフレーム消去
.:インデックス
..:インデックスのインデックス
ささだです。
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