From: SASADA Koichi Date: 2007-05-31T01:27:09+09:00 Subject: [ruby-dev:30847] Re: Supporting Fiber  ささだです。 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