Project

General

Profile

Actions

Feature #1211

closed

nested loop construct

Added by matz (Yukihiro Matsumoto) about 15 years ago. Updated about 12 years ago.

Status:
Rejected
Target version:
[ruby-dev:38080]

Description

=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

Actions

Also available in: Atom PDF

Like0
Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0