From: SASADA Koichi Date: 2007-08-28T01:29:58+09:00 Subject: Re: Fibers in Ruby 1.9? Hi, Charles Oliver Nutter wrote: > Is there any documented specification for Fibers yet? I've got basic > Fibers working in JRuby using native threads (first two tests in your > test_fiber pass), but I'm not clear on the semantics of a few methods. I > also don't have it working for a "normal" thread to participate as a > fiber (i.e. Fiber.current only works within an explicitly-created fiber > at the moment). > > There are also some interesting questions I have to resolve regarding > fibers in a concurrent native-threaded VM. > > Pointers to documentation would be appreciated :) I think Fiber class is not needed for most of people. Because 1.9 support Enumerator as outer iterater (I'm not sure about this nameing) such as Java's Iterator or Python's Generator or Ruby's 'generator' library and so on. en = 3.times # Calling Fixnum#times without # block return Enumerator p en.next #=> 0 p en.next #=> 1 p en.next #=> 2 p en.next #=> call exception: StroIteration en.rewind loop{ p en.next #=> 0, 1, 2 } # loop method catch StopIteration Main purpose of Fiber is to realise outer iterator. In fact, Enumerator#next using Fiber. So I think ruby/test_enumerator.rb is more important test than implement Fiber's methods. BTW, I can't summarise Fiber's document because I must write doctor thesis (it's about Ruby/YARV) :) So please wait for middle of Sep. Can Matz or someone write it? Easy instruction: ================= Fiber#resume Resume Fiber's context. Fiber.yield(...) return values to resuming context. example: f = Fiber.new{ Fiber.yield 1 Fiber.yield 2 Fiber.yield 3 } f.resume #=> 1 f.resume #=> 2 f.resume #=> 3 Fiber.current return current fiber. Fiber#alive? return if this fiber is alive or not. Fiber#transfer tranfer fiber context. This method break resume/yield (parent/child) relation, so we shouldn't use it (this method is similar to callcc). example: f1 = Fiber.current f2 = Fiber.new{ f3.transfer 10 } f3 = Fiber.new{|e| f1.transfer e + 20 } p f1.resume #=> 30 fiber.so If you require fiber.so, above Fiber methods are added. This library is for professional (for what?). continuation,so If you require continuation.so, callcc is available. I want to rename this library as unsafe/continuation.so or somthing. Regards, -- // SASADA Koichi at atdot dot net