[#352] ruby 1.1a5 released — matz@... (Yukihiro Matsumoto)

まつもと ゆきひろです

38 messages 1997/09/01
[#353] Re: ruby 1.1a5 released — keiju@... (石塚圭樹 ) 1997/09/01

[#354] Re: ruby 1.1a5 released — matz@... (Yukihiro Matsumoto) 1997/09/01

まつもと ゆきひろです

[#356] Re: methods [Re: ruby 1.1a5 released] — matz@... (Yukihiro Matsumoto) 1997/09/01

まつもと ゆきひろです

[#357] Re: methods [Re: ruby 1.1a5 released] — keiju@... (Keiju ISHITSUKA) 1997/09/01

けいじゅ@日本ラショナルソフトウェアです.

[#359] Re: methods [Re: ruby 1.1a5 released] — matz@... (Yukihiro Matsumoto) 1997/09/02

まつもと ゆきひろです

[#363] Re: methods [Re: ruby 1.1a5 released] — matz@... (Yukihiro Matsumoto) 1997/09/02

まつもと ゆきひろです

[#374] Re: methods [Re: ruby 1.1a5 released] — matz@... (Yukihiro Matsumoto) 1997/09/02

まつもと ゆきひろです

[#376] Re: methods [Re: ruby 1.1a5 released] — keiju@... (Keiju ISHITSUKA) 1997/09/02

けいじゅ@日本ラショナルソフトウェアです.

[#382] Re: methods [Re: ruby 1.1a5 released] — matz@... (Yukihiro Matsumoto) 1997/09/02

まつもと ゆきひろです

[#390] Re: methods [Re: ruby 1.1a5 released] — keiju@... (Keiju ISHITSUKA) 1997/09/03

けいじゅ@日本ラショナルソフトウェアです.

[#391] Re: methods [Re: ruby 1.1a5 released] — matz@... (Yukihiro Matsumoto) 1997/09/03

まつもと ゆきひろです

[#441] How to report a bug — takagi@... (TAKAGI Hiromitsu)

Bus error が出ました。

15 messages 1997/09/09

[#461] [Q] ruby-socket(mswin32) — Masaki Suketa <suke@...>

助田です

27 messages 1997/09/11
[#462] Re: [Q] ruby-socket(mswin32) — matz@... (Yukihiro Matsumoto) 1997/09/11

まつもと ゆきひろです

[#463] Re: [Q] ruby-socket(mswin32) — Masaki Suketa <suke@...> 1997/09/11

助田です

[#464] Re: [Q] ruby-socket(mswin32) — matz@... (Yukihiro Matsumoto) 1997/09/11

まつもと ゆきひろです

[#467] Re: [Q] ruby-socket(mswin32) — WATANABE Hirofumi <watanabe@...> 1997/09/11

わたなべです.

[#594] BUG?(marshal) — Masaki Suketa <suke@...>

以下のプログラムを実行した時に(3)と(4)で出力結果が違います。

17 messages 1997/09/30

[ruby-dev:570] Re: Tail recursion (Re: optimize (...))

From: "EGUCHI Osamu" <eguchi@...>
Date: 1997-09-29 23:30:07 UTC
List: ruby-dev #570
えぐち です。

----------
> 差出人 : Yukihiro Matsumoto <matz@netlab.co.jp>
> 件名 : [ruby-dev:566] Re: [563] Tail recursion (Re: optimize (...))
> 
> まつもと ゆきひろです
> 
> In message "[ruby-dev:565] Re:[563] Tail recursion (Re: optimize (...))"
>     on 97/09/29, "EGUCHI Osamu" <eguchi@shizuokanet.or.jp> writes:
> 
> |えぐち です。
> 

> |いまフレーム・ブロック・スコープなど環境をハードウェアスタックに
> |つんでいますが、これを動的な配列なり、リストなりに置くようにする
> |事で fact な問題は緩和されそうです。
> 
> ええ,それはそうなんですけど,やっぱりハードウェアスタックは
> 速いので,なかなか迷うところです.以前,ソフトウェアスタック
> 化を実装してみたところ,かなり遅くなりましたし.
> 
> # ずいぶん前なので数値を忘れてしまったのですが.

このへんのバランスからして今の rb_eval() は
かなりの完成度にあると思うです。

> |しかし真剣に rb_eval() を非再帰構造にするとなると、 
> |break/redo/next 3兄弟が制御構造 *ではなく* 関数であることや、
> |例外・イテレータとの折り合いを付けるために、字句・構文・評価で
> |情報の受け渡しを密接に行わなければならないのでかなり厄介です。
> 
> この辺を考えて1.1ではbreak/next/redo/retryは制御構造になって
> ます.でも,問題はそれだけではありませんものね.

でもかなり parse で出来ることが増えます。
欠点としては、Obfuscated ruby code contest で

	break = next + redo / retry

が選外になることがあげられます。 (^^)

> |私のイメージでは、rb_eval() を非再帰化するというと、
> |構文木を今の異種リストから機械語の様なバイトコードに変更する
> |と言うことのように思えるのですが、違いますか?
> 
> そこまでは考えていないんですけど,
> 
>    case NODE_WHILE:
>      while (eval(node->cond)) {
>        eval(node->body);
>    }
> 
> のようになっているものを
> 
>    case NODE_JUMPIF:
>      if (RTEST(result)) {
>        node = node->jump;
>        goto again;
>      }
>      break;
> 
> のようなものによって展開できたら良いなあ,と考えているのです.

この方法でのパーサは、 break, next, redo などの行き先も
(たぶん2パスで)生成することが必要になりますね。
rb_eval() がその分実行時のダイナミックなフロー制御から開放され
かなりループなどの実行が速くなりそうです。

	えぐち

In This Thread

Prev Next