From: SASADA Koichi Date: 2010-05-04T12:04:06+09:00 Subject: [ruby-dev:41146] Re: [Bug #3050] Fiber transfer limitation  ささだです. (2010/05/03 22:57), Yusuke Endoh wrote:: >>  現在,Fiber#transfer と Fiber.yield/Fiber#resume は一緒に使うな,使っ >> て変なことが起きても知らないよ,という立場を取っています.というのも,一 >> 緒に使うと簡単に SEGV させることが出来るからです. > > 混ぜると理解困難な挙動になるのは確かなんですが、SEGV するとは > 知りませんでした。 > この例に関しては、最後のパッチで SEGV はしなくなると思います。  新しい仕様を考えるのはしんどそうだし,SEGV しなくなればとりあえず良い と思いますので,遠藤さんを信じます.   >>  例えば前者が出来るクラスを Coroutine,後者が出来るクラスを >> SemiCoroutine として提供して混ぜないようにするという手段もあるのですが, >> 大クラス主義の Ruby とはなじみません. > > 大クラス主義は「概念的に似ているものに複数のクラスを作らない」 > だと思います。 > Coroutine と SemiCoroutine は実装はほとんど共通しているものの、 > 概念的にはかなり異なっていると感じます。goto と function call > くらいには違いますよね。 > なので、別の名前にしてもよかったんじゃないかなあ。今更ですが。 > > [ruby-dev:31596] 以来、transfer は用途がわからないわりに混乱を > 招くと言う「百害あって一利なし」だと思うので、なければよかった > のにと思っています。  continuation と合わせて,gem とかに追い出しちゃえばよかったかなぁ.  ちなみに,Control flow を制御する,という意味で,私の中ではやっぱり同 じものってカテゴリーに. -- // SASADA Koichi at atdot dot net