[ruby-list:116] while vs WHILE

From: nakawtse@... (P nakawtse)
Date: 1996-02-02 04:16:02 UTC
List: ruby-list #116

中渡@NTTです.

−−−
まつもと ゆきひろ@トヨタケーラムです.
この実験が間違っていました.やり直したところ面白い結果が出ま
した.

 (1) イテレータは遅くない
        time ruby -e 'i=0; while i<10000; i+=1 end'
            0.6 real         0.5 user         0.0 sys
        time ruby -e 'for i in 0..10000; end'
            0.8 real         0.2 user         0.6 sys
        time ruby -e '0.upto(10000){}'
            0.8 real         0.2 user         0.6 sys 

whileは
    while(条件を評価) {      ループの中を評価    }

WHILE(イテレータ)は
    ブロックをセーブする
    コンテキストをセーブする(setjmp)
    イテレータ関数を呼ぶ
    yieldでブロックを復旧し,ブロックを評価する
    retryでコンテキストを復旧(longjmp)
−−−−−−
 これだけ見ると,どう見てもイテレータの方がコストが
 大きいんですけど.もっと低レベルでは同じくらいの命令を
 こなしてるのでしょうか?
# i+=1 -> i++ で変わるとか(^^)

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

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



−−

In This Thread

Prev Next