[ruby-list:117] Re: while vs WHILE

From: matz@... (Yukihiro Matsumoto)
Date: 1996-02-02 04:29:01 UTC
List: ruby-list #117
まつもと ゆきひろ@トヨタケーラムです.

In message "[ruby-list:116] while vs WHILE"
    on 96/02/02, P nakawtse <nakawtse@syrinx.dq.isl.ntt.jp> writes:
|中渡@NTTです.

| これだけ見ると,どう見てもイテレータの方がコストが
| 大きいんですけど.もっと低レベルでは同じくらいの命令を
| こなしてるのでしょうか?

そういうことなんでしょうね.私もイテレータの方が遅いと思って
いましたから.

# マシンによってここまで変わる理由はまだ分かりません.多分,
# 関数呼出のコストがCISCでは大きいせいではないかと.

|# i+=1 -> i++ で変わるとか(^^)

多分,この辺が効いていると思います(rubyにi++はありませんけど).
つまり,whileの方は「i<10000」,「i+=1」の評価をrubyのレベル
で行わなければならないが,イテレータの方はC言語のレベルで実
行できるという違いが大きいのでしょう.事実,昨日の間違いはルー
プの中身が空でなかったせいですし.たとえば,

        time ruby -e '0.upto(10000){i+=1}'
            1.4 real         0.6 user         0.7 sys

のような感じになります.2倍程度遅いというのはこの数字を見た
せいです.

|   時間の測定精度はどのくらい信用できるのでしょうか?
| もっと精密なのもありましたよね..

精度はあまり高くないと思います.目安程度に考えてください.い
ちおう複数回実行して一番成績の良いものを選んでいますけど,せ
いぜい0.1sec程度の精度しかないと思います.

まあ,速度のオーダーが分かれば良いので,これ以上精密に測って
もむくわれない気がします.

|適切なメソッドが無くてイテレータ以外ではトラバースでき
|ない可能性だってあります.
|----
|  whileループでダメな場合があるわけですね.

そうです.むしろこっちを重視したいです.イテレータの本来の目
的ですから.
                                まつもと ゆきひろ /:|)

In This Thread

Prev Next