Hi John,

On Nov 23, 2009, at 12:55 PM, John Shea wrote:
> No I assume at some stage the ruby block has to be turned into a C block with 
> associated scope - and from my limited knowledge on GCD that does not seem so 
> easy. 

Again, I think I'm still missing your point. In the context of GCD, this is a 
non-issue since you don't *have* to use C blocks.  Instead, GCD provides a 
function pointer + context pointer API, which is what MacRuby uses:

http://github.com/masterkain/macruby/blob/master/gcd.c

>     if (RTEST(synchronous)){
>         dispatch_sync_f(RQueue(self)->queue, (void *)block,
>               rb_queue_dispatcher);
>     } 
>     else {
>         dispatch_async_f(RQueue(self)->queue, (void *)block,
>               rb_queue_dispatcher);
>     }

That is, C just treats the Ruby block as a data pointer.

-- Ernie P.


_______________________________________________
MacRuby-devel mailing list
[email protected]
http://lists.macosforge.org/mailman/listinfo.cgi/macruby-devel

Reply via email to