ささだです.

 いろいろと 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