From: keiju@... (=?ISO-2022-JP?B?GyRCQFBETTc9PHkbKEI=?= ) Date: 1997-08-12T23:00:01+09:00 Subject: [ruby-dev:110] Re: tail recursion (Re: LaTeX ruby documents) けいじゅ@日本ラショナルです. In [ruby-dev :00106 ] the message: "[ruby-dev:106] Re: tail recursion (Re: LaTeX ruby documents) ", on Aug/12 13:14(JST) matz@netlab.co.jp (Yukihiro Matsumoto) writes: >まつもと ゆきひろです >|テールリカージョンの実装でスタック操作を行う理由が良く分からんのですが... > >つまりメソッドの末尾のメソッド呼び出しがrubyで定義されたメソッ >ドであればCレベルの再帰を行わないことでマシンスタックのレベ >ルを節約しようと思ったのでした. 実際にメソッドを実行していって, テールリカージョンを検出しようってわけ ですね? >|構文解析時にテールリカージョンであると分かったら, 再帰をループに変換す >|るんじゃないんですか?? > >rubyのような動的なオブジェクト指向言語で構文解析時にテールリ >カージョンが検出できますかね.出来ないと思ったので,上のよう >な方法を採用しようと思ったのですが. いくら動的といっても, そのメソッドを実行中にそのメソッドの定義が変わるっ てこともないんだから平気じゃない? と思ったんだけど... このメイルの後半参照!! >|幻のバージョンですね.... バイトコードにまでしたんですよね? >そうです.もったいなかったかなあ. でも, 最近はさらにマシンスピードもあがってきているのでバイトコードイン タプリタにしても良いような... # そうすると, メソッドもオブジェクトになってさらに嬉しい(^^;;; というのはともかく, バイトコードならメソッドキャッシュなどの道も開ける んじゃないかな? おまけ: 実行時に動的にメソッドを定義してみると... $i = 0 def foo print "old foo\n" eval "def foo; print 'new foo\n'; end" foo end foo うーん. ちゃんと動いている... これでは構文解析時の検出は無理か... これって, 良くちゃんと動きますね? ちゃんと考えて作ってある? __ ..........................................石塚 圭樹@日本ラショナル... ----------------------------------->> e-mail: keiju@bc.mbn.or.jp <<---