From: Yusuke ENDOH Date: 2007-06-14T20:15:54+09:00 Subject: [ruby-dev:30986] Re: Supporting Fiber 遠藤です。 > > 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