Issue #1211 has been updated by Motohiro KOSAKI.
Status changed from Assigned to Rejected
三年前の高速化ネタを蒸し返すのも不毛なのでCloseしますね。たぶん今計り直すと全然違う結果が得られる気がするので新チケットで最初から議論しなおしたほうがマシでしょう
Feature #1211: nested loop construct
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