yarv-dev:202
From: SASADA Koichi <ko1 atdot.net>
Date: Thu, 16 Sep 2004 16:32:59 +0900
Subject: [yarv-dev:202] Re: return from orphan Proc object
MAEDA Atusi <maeda-yarv atusi.org> wrote :
[ [yarv-dev:198] Re: return from orphan Proc object ]
at 16 Sep 2004 12:11:34 +0900
ささだです.
> 前田(敦)@大岡山へ出張中です。
ソフトウェア科学会ですかー.
>> Proc オブジェクトの生成時にヒープにコピーしないと、ライト
>> バリアみたいなものが必要になると思うんですが、どうでしょう。
>> call/cc をそうやりました、って論文が情報処理学会PROであった
>> 気がするけれど、ペイするのかなぁ、って印象でした。
>
> 継続の生成におけるスタックコピーの遅延
> 鵜川始陽、皆川宜久、小宮常康、八杉昌宏、湯淺太一
> 情報処理学会論文誌「プログラミング」Vol.44 No.SIG13
> ですね。
はい.
>> >前田さんへのフォローに書きましたが、returnできる場所から
>> >returnしないのはまずいのではないかと思います。
>>
>> うう、そうですか。困ったなぁ。
>>
>> いつ、どうやって「これ以降 return 禁止」と教えてあげればい
>> いのか。
>
> Common Lispのblock/return-fromやtagbody/goの実装は(単純な場合はもちろ
> ん「スタックレベルを合わせてジャンプ」ですみますが)、一般には動的にス
> タックをサーチする大域脱出になります(ensureみたいな処理がありますから、
> 当然ですね)。
>
> ユニークなデータ(たとえばconsセル)をblockに入った時に脱出タグとして作
> り、スタックに積む。
>
> return-from は内部的には (exit-searching-tag unique-id value)のように
> 実装され、unique-idはクロージャの環境に閉じ込められる。
>
> blockから出てしまうと、unique-idを目印に持つblockのフレームがスタック
> から無くなるので、return-fromできなくなる。
>
> で良いんでは?
それで出来ることはわかっているんですが,その「ユニークな何か」
を積むための空間的,時間的コスト,どちらかというと一個フレーム
に一個積むときの,その時間的コストですか.そいつが嫌です.
今のところ,Java風の例外テーブルによる管理でうまくいっている
ので,そいつ(Orphan からの return を「エラーにする」)のため
だけに何か積む方法にするのは嫌だなぁ,と考えています.
とくに,ensure は,特にコストもなく(ensure であることで何
か命令を実行することなく)実装できましたので,結構いいんじゃ
ないかと考えてます.
ジャンプするときは,スタックをがりがり巻き戻してます.
--
// SASADA Koichi at atdot dot net
//
--
ML: yarv-dev quickml.atdot.net
使い方: http://www.atdot.net/~ko1/quickml
185 2004-09-15 21:12 [ko1 atdot.net ] return from orphan Proc object 187 2004-09-15 22:02 ┣[maeda-yarv atusi.org] 188 2004-09-16 01:01 ┃┗[matz ruby-lang.org ] 190 2004-09-16 01:45 ┃ ┗[ko1 atdot.net ] 192 2004-09-16 02:13 ┃ ┗[matz ruby-lang.org ] 193 2004-09-16 07:53 ┃ ┗[ko1 atdot.net ] 194 2004-09-16 08:14 ┃ ┗[matz ruby-lang.org ] 195 2004-09-16 08:37 ┃ ┣[ko1 atdot.net ] 196 2004-09-16 08:50 ┃ ┃┣[matz ruby-lang.org ] 198 2004-09-16 12:11 ┃ ┃┗[maeda-yarv atusi.org] -> 202 2004-09-16 16:32 ┃ ┃ ┗[ko1 atdot.net ] 211 2004-09-16 17:52 ┃ ┃ ┗[maeda-yarv atusi.org] 214 2004-09-16 18:02 ┃ ┃ ┗[ko1 atdot.net ] 197 2004-09-16 11:47 ┃ ┗[maeda-yarv atusi.org] 199 2004-09-16 14:04 ┃ ┣[matz ruby-lang.org ] 200 2004-09-16 16:23 ┃ ┃┣[ko1 atdot.net ] 204 2004-09-16 16:58 ┃ ┃┃┣[matz ruby-lang.org ] 208 2004-09-16 17:22 ┃ ┃┃┃┗[ko1 atdot.net ] 209 2004-09-16 17:30 ┃ ┃┃┃ ┗[matz ruby-lang.org ] 212 2004-09-16 17:53 ┃ ┃┃┃ ┗[ko1 atdot.net ] 216 2004-09-16 18:18 ┃ ┃┃┃ ┗[matz ruby-lang.org ] 207 2004-09-16 17:19 ┃ ┃┃┗[maeda-yarv atusi.org] 210 2004-09-16 17:42 ┃ ┃┃ ┗[ko1 atdot.net ] 213 2004-09-16 18:01 ┃ ┃┃ ┣[maeda-yarv atusi.org] 219 2004-09-16 18:24 ┃ ┃┃ ┃┗[ko1 atdot.net ] 224 2004-09-17 00:21 ┃ ┃┃ ┃ ┗[maeda-yarv atusi.org] 225 2004-09-17 00:45 ┃ ┃┃ ┃ ┗[ko1 atdot.net ] 226 2004-09-17 12:02 ┃ ┃┃ ┃ ┗[maeda-yarv atusi.org] 227 2004-09-17 12:11 ┃ ┃┃ ┃ ┣[ko1 atdot.net ] 228 2004-09-17 13:38 ┃ ┃┃ ┃ ┗[ko1 atdot.net ] 218 2004-09-16 18:22 ┃ ┃┃ ┗[matz ruby-lang.org ] 220 2004-09-16 18:31 ┃ ┃┃ ┗[ko1 atdot.net ] 221 2004-09-16 19:03 ┃ ┃┃ ┗[matz ruby-lang.org ] 222 2004-09-16 19:08 ┃ ┃┃ ┗[ko1 atdot.net ] 223 2004-09-16 19:12 ┃ ┃┃ ┗[ko1 atdot.net ] 201 2004-09-16 16:33 ┃ ┃┗[maeda-yarv atusi.org] 206 2004-09-16 17:01 ┃ ┃ ┗[matz ruby-lang.org ] 215 2004-09-16 18:06 ┃ ┃ ┗[maeda-yarv atusi.org] 217 2004-09-16 18:20 ┃ ┃ ┗[matz ruby-lang.org ] 203 2004-09-16 16:38 ┃ ┗[ko1 atdot.net ] 189 2004-09-16 01:04 ┗[matz ruby-lang.org ] 191 2004-09-16 01:51 ┗[ko1 atdot.net ] 205 2004-09-16 16:58 ┗[ko1 atdot.net ]