[Rejected] nested loop construct

Issue #1211 has been updated by Motohiro KOSAKI.

Status changed from Assigned to Rejected

三年前の高速化ネタを蒸し返すのも不毛なのでCloseしますね。たぶん今計り直すと全然違う結果が得られる気がするので新チケットで最初から議論しなおしたほうがマシでしょう

Feature #1211: nested loop construct
https://bugs.ruby-lang.org/issues/1211

Author: Yukihiro M.
Status: Rejected
Priority: Low
Assignee: Yukihiro M.
Category: core
Target version: 2.0.0

=begin
まつもと ゆきひろです

最近、AO Benchを見ています。http://lucille.atso-net.jp/aobench/
実行時間の1/3はGCが消費していて涙目。

それはそれとして、AO Benchの中には

 nphi.times do |j|
   ntheta.times do |i|

のような多重ループがあります。これを

nloop(nphi, ntheta) do |j,i|

というように書けたら、よりわかりやすく、かつ、やや高速なので
はないかと考えました。実際に実装したところ、AO Benchでは5%程
度実行時間が短縮されるようです。

検討事項は

  • そもそも必要なのか。YARVではややブロック呼び出しが重い傾
    向があるので効果があったが、よりブロック呼び出しが軽量に
    なれば不要ではないか

  • 名前。今回はnested loopということでnloopという名前で実装
    したが、もっと適切な名前があるかもしれない。妙な短縮形よ
    りも長くても記述的な名前を好む人も多いかも。Ruby(というか
    私)は前者を好む傾向はあるけど

  • 他の案としてはloopが引数を取るようにして、nloop相当にす
    るというものがある。しかし、1.9のloopメソッドが持つ
    StopIteration例外でループ終了というセマンティックスと多
    重ループがうまくつながらなかったので、今回はやめておいた

などが考えられます。どう思いますか?

                             まつもと ゆきひろ /:|)

=end

This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.

| Privacy Policy | Terms of Service | Remote Ruby Jobs