From: SASADA Koichi Date: 2007-08-22T04:03:26+09:00 Subject: [ruby-dev:31583] Fiber reviesed  ささだです.  いろいろと Fiber の仕様を悩んでいたんですが,決めました.で,実装 してコミットしました. ・Fiber はセミコルーチン  Lua や Python でおなじみのセミコルーチンです.通常はこちらで十分だ と思います.  Fiber#resume で対象ファイバへスイッチ,Fiber.yield で resume した ファイバへ戻ります.Lua のインターフェースそのままです.Python の ジェネレータで言うと,next と yield にあたります.  例外が発生すると,resume した人に例外が伝播します.  ファイバが終了すると,そのブロックの返り値を resume したファイバへ 返します.  ひとつのファイバを多重に resume することはできません.エラーになり ます. -> これで問題になることってありますかね? Pythonのジェネレータも そうかと思ったのですが,例によってはずしてるかも. fib = Fiber.new{ Fiber.yield 10 20 } p fib.resume #=> 10 p fib.resume #=> 20 p fib.resume #=> FiberError ・Fiber::Core はコルーチン  Fiber::Core#transfer というメソッドで,ファイバ間を移動します.玄 人向け.  例外が発生したら root fiber へ伝播します.終了も,root fiber へ戻 ります.なので,制御が難しいいので玄人向け.  ちなみに,root fiber は Fiber::Core のインターフェースになります (resume 出来ないし).  Fiber::Core というのは,名前が良くないと思う.けど,ほかに思い浮か ばなかった.  どんなもんでしょうか. -- // SASADA Koichi at atdot dot net