Shiro Kawai
shiro****@lava*****
2003年 2月 10日 (月) 12:03:46 JST
From: Kimura Fuyuki <fuyuk****@hadal*****> Subject: Re: [Gauche-devel-jp] 継続について質問 Date: Mon, 10 Feb 2003 08:56:28 +0900 > なんにせよ、call-with-values 以外のところに多値が出てきたときにどう動 > 作するかは、(確定したら)マニュアルに書いておいたほうがいいと思います。 多値の実装はうまい落しどころを探している最中で、0.6.3あたりで 一度見直したんですが、一箇所直してもまだぽろぽろ出て来ますね。 やっぱり厳密にやらないとだめかなあ。真っ当にやろうとすると、 VMのほぼ1インストラクション毎にチェックを入れなくちゃならないので 何とか抜け道は無いかと考えています。 (Ashley&Dybvigのリターンポイントを2つ作る方法[1]は、現在のVMではちょっと 導入しにくいんですが、次期VM (いつだ?) では試せるかもしれません)。 今のところ、期待される数よりも多くの値が渡された場合、 大抵は最初の値だけが取られるようになっているんですが (CommonLisp的)、それを当てにしたコードが書かれると 他のSchemeとの互換性等の面でいろいろ問題もあるので、 どうしようか、決めかねています。 R5RS的には、期待されている値の数よりも少ない値や多い値を継続に 渡した場合の動作は未定義(unspecified)なので、 何が起こってもおかしくは無いわけですが。 [1] J. Michael Ashley, R. Kent Dybvig: An efficient implementation of multiple return values in Scheme, in Proceedings of the 1994 ACM conference on LISP and functional programming, 1994, Orlando, Florida, United States. --shiro