From: Yukihiro Matsumoto Date: 2009-02-26T03:33:28+09:00 Subject: [ruby-dev:38080] [Feature:trunk] nested loop construct まつもと ゆきひろです 最近、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例外でループ終了というセマンティックスと多 重ループがうまくつながらなかったので、今回はやめておいた などが考えられます。どう思いますか? まつもと ゆきひろ /:|)