Hey Alan, Awesome! I haven't had a chance to go through the code in detail, but I like the general approach. I'll definitely be looking into this in more detail later, but for now I just wanted to let you know that there are specs for Ruby 1.9's fibers in the MacRuby repo at 'spec/frozen/library/fiber'. It would be interesting to see how many of them pass with your implementation.
Cheers, Josh On Thursday, January 5, 2012 at 10:36 AM, Alan Skipp wrote: > Hi everyone, > I've had a go at implementing Fibers using dispatch queues. The code can be > found here: > > https://gist.github.com/1565393 > > Inspiration was taken from the following ruby 1.8 Fibers implementation: > https://gist.github.com/4631 > > The implementation of Fiber.yield currently relies upon a hash stored as a > class variable. This is hopefully just a temporary solution to get things > started. The hash is always accessed through a serial queue (so it should be > thread safe) and dead fibers are removed after use. There are a couple of GCD > functions that look like they could be used to solve this problem: > 'dispatch_queue_set_specific' and 'dispatch_set_context'. Though I'm not sure > how to use these from Macruby. If anyone has any experience using either of > those GCD functions I'd be interested in learning more. > > The major omission currently is the lack of a 'transfer' method. I've > pondered this quite a bit, but I've yet to come up with a solution. It is > quite possible that the way I've written the Fiber class prevents a > successful implementation of a 'transfer' method - but I've not given up just > yet. If anyone has a cunning plan on how to achieve it, that would be great. > > I've tested all the examples here: > http://pragdave.blogs.pragprog.com/pragdave/2007/12/pipelines-using.html > > and they all seem to work, plus I've included a few tests in the gist. > The test which creates a fiber from Fiber.current, causes macruby to crash, > but I don't know why - it doesn't cause a crash when invoked normally outside > of minitest. > > From my limited tests, everything other than the 'transfer' method appears to > be working, but feedback would be welcome if you discover any problems. > > Al > _______________________________________________ > MacRuby-devel mailing list > MacRuby-devel@lists.macosforge.org (mailto:MacRuby-devel@lists.macosforge.org) > http://lists.macosforge.org/mailman/listinfo.cgi/macruby-devel > >
_______________________________________________ MacRuby-devel mailing list MacRuby-devel@lists.macosforge.org http://lists.macosforge.org/mailman/listinfo.cgi/macruby-devel