ささだです。

Yukihiro Matsumoto さんは書きました:
> |>>> (3) API 名は適当でしょうか?
> |
> |確かに、Fiber#runはピンと来ませんでした。「起こす」系がいいと思いました
> |が、Threadとの類似は避けたほうがいいものなんでしょうか。現状でどれかと言
> |えばpassかな。。。
> 
> 協調型スレッドでは伝統的にyieldという単語が使われていますが、
> 予約語と重なるのでよくないかなあ。

 これは、Fiber#pass を、全部 Fiber#yield に変えるべき、という
ことでしょうか。

root = Fiber.current
consumer = nil

producer = Fiber.new{
  10000.times{|e|
    consumer.yield e # (a)
  }
  consumer.yield nil
}

consumer = Fiber.new{
  while v = producer.yield # (b)
    p v
  end
}

producer.yield # (c)

 (a), (b) は yield で良いような気がするんですが、(c) も yield
でいいでしょうか。いいような気もしますが。

 おっしゃる通り、予約語との yield と混乱する、というほうが害
が大きいかもしれません。



 Lua の API は、coroutine.resume, coroutine.yield となるよう
です。

 今の API を利用して記述すると、

class Fiber
  def self.resume fiber, *args
    fiber.pass *args
  end

  def self.yield *args
    Fiber.prev.pass *args
  end
end

というようです(クラスメソッド相当で、yield は直前に resume し
た先へ戻る)。resume が切り替え先ファイバを引数に取るのが興味
深いですね。

-- 
// SASADA Koichi at atdot dot net