[ruby-list:108] Re: None

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

In message "[ruby-list:107] None"
    on 96/01/31, P nakawtse <nakawtse@syrinx.dq.isl.ntt.jp> writes:
|  中渡@NTTです.
|
|------------
|まつもと ゆきひろ@トヨタケーラムです.
|| ここで while と WHILE とはみかけ(論理上)は同じかもしれませんが
|| 動作は違うのではないでしょうか?.それによって効率が違うとか? 
|表面上の動作は同じですが,実装は全然違います.組込みのwhile
|の方が断然効率が良いです.
|------------
| #ちょっと中身も気になり始めたこのごろ.
| 実装はどう違うのですか?

eval.cに実装があるんですけど,読んでもちょっと分からないでしょ
うね.簡単に説明すると

whileは

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

WHILE(イテレータ)は

    ブロックをセーブする
    コンテキストをセーブする(setjmp)
    イテレータ関数を呼ぶ
    yieldでブロックを復旧し,ブロックを評価する
    retryでコンテキストを復旧(longjmp)

してます.イテレータの方はsetjmp/longjmpでループを作っている
形になりますね.今ちょっと実験したらイテレータの方が2倍くら
い遅いみたいです.

|−−−−−
|0っていうのは無理でしょうが,効率を考えなければ今よりかなり
|減らすことは可能だと思います.まあ,そこまでしないのがrubyの
|ポリシーだと思ってください.
|−−−−−−−
|
| 最低限組み込むのは,どんなものでしょうか?
| pure lispくらい?
| この最低の言語というのも研究上おもしろいと思う.
| 実用にはならないけれど.

制御構造の話ですよね.ifとイテレータと大域脱出(break, retry)
と例外(begin, fail)があれば,残りは作れるのではないでしょう
か.実用を考えなければ,例外も外せるかも.

In This Thread

Prev Next