遠藤です。

> > Lua の coroutine は semi-coroutine で、coroutine 間に親子関係がありました。
>  Pythonと同じですね。

Python は関数内にレキシカルに yield があるときだけ coroutine 化
(というか generator 化) する、という違いはあるようです。


>  中途半端ととるか、Ruby らしいいいとこ取りととるかは人による
> 感じでしょうかね。「親子関係をもったような何か」もやりやすい
> し、「対等な関係」を実現することも可能、というように作りました。

残念ながら今のところ、どちらもやりにくいと思います。
対等な関係は callcc でやれってことにして、Lua 式に従うとか。
# 個人的には Lua 式 (≠ Python 式) が好みになってきました。


>  Siumula は調べてませんでした。これは興味深いですね。両方の機
> 能を、ってのは今の Fiber みたいなの、ということではないんです
> かね。

以下の論文をすごく拾い読みしただけなので詳細は知りません。
Lua の開発陣?の論文なので、Lua に偏ってるのはしょうがないです :D

http://citeseer.ist.psu.edu/694109.html


> 他の言語を見てみると「Fiber(のようなもの)が終わる」ってい
> うのは「例外的な操作」なので、「気をつけてね」でもいいような気
> はします。

じゃあ Fiber.root に例外を投げたらどうでしょう。
わかりにくい異常な挙動をするより、わかりやすい異常な挙動を
してくれた方がマシな気がします。


いずれにしても、coroutine の設計は複雑で、明確な答えもないことは
理解しました。[ruby-dev:30924][ruby-dev:30941] で適当なことを
言ってしまってすみません。

-- 
Yusuke ENDOH <mame / tsg.ne.jp>