[Gauche-devel-jp] 多値のバグ?

Zurück zum Archiv-Index

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



Gauche-devel-jp メーリングリストの案内
Zurück zum Archiv-Index