From: Yukihiro Matsumoto Date: 2009-02-26T04:43:48+09:00 Subject: [ruby-dev:38084] Re: [Feature:trunk] nested loop construct まつもと ゆきひろです In message "Re: [ruby-dev:38083] Re: [Feature:trunk] nested loop construct" on Thu, 26 Feb 2009 04:00:11 +0900, Yukihiro Matsumoto writes: || もうちょっと軽くなるようにしたいと思うんですがねぇ.あと,こういうのは ||C で書くよりも Ruby で書いた方が速いかも. | |そうか。ちょっとやってみよう。 やってみました。残念ながら50%くらい遅くなってオリジナルより も低速でした。 オリジナル: 262秒 nloop(C版): 249秒 nloop(Ruby): 375秒 ブロック呼び出しはRubyからの方が速いのですが、それよりもメソッ ド呼び出しの少なさの方が効くようです。Ruby版nloopの作りが悪い せいかもしれません def nloop(*args, &block) helper = ->(args, buf, offset, block) { limit = args[offset] if (offset+1 == args.size) limit.times do|i| buf[offset] = i block.yield *buf end else limit.times do|i| buf[offset] = i helper.(args, buf, offset+1, block) end end } helper.(args, [], 0, block) end