[MacRuby-devel] Feedback: Dispatch high-level wrappers

Ernest N. Prabhakar, Ph.D. prabhaka at apple.com
Mon Feb 8 17:46:28 PST 2010


Hi all,

As hopefully you all know, MacRuby 0.5 includes wrappers for almost all of the C "dispatch" APIs for Grand Central Dispatch.  While relatively straightforward to use, the APIs are somewhat verbose and C-ish.

http://svn.macosforge.org/repository/ruby/MacRuby/trunk/spec/macruby/core/gcd/

For MacRuby 0.6, I'd like to provide higher-level convenience APIs to reduce the "cognitive overhead" and "semantic noise" of using Grand Central Dispatch.  In other words, let people do what they want without having to learn or type as much as they do now.

My first attempt at this is a new 'dispatch' library:

http://svn.macosforge.org/repository/ruby/MacRuby/trunk/lib/dispatch/

which (from the latest MacRuby nightly) you can access via:

	require 'dispatch'

This defines:

- A Dispatch::Actor class which wraps a given object with serialization and asynchronous callbacks

http://svn.macosforge.org/repository/ruby/MacRuby/trunk/lib/dispatch/actor.rb

- Convenience methods on the Dispatch module

http://svn.macosforge.org/repository/ruby/MacRuby/trunk/lib/dispatch/dispatch.rb

- Parallel extensions to Enumerable

http://svn.macosforge.org/repository/ruby/MacRuby/trunk/lib/dispatch/enumerable.rb

- A Futures class for delayed execution (duck-typed to lambda)

http://svn.macosforge.org/repository/ruby/MacRuby/trunk/lib/dispatch/future.rb

- a 'stride' function on top of Dispatch::Queue#apply

http://svn.macosforge.org/repository/ruby/MacRuby/trunk/lib/dispatch/queue.rb

- Queue-based source constructors

http://svn.macosforge.org/repository/ruby/MacRuby/trunk/lib/dispatch/queue_source.rb

I've also written up specs to both test and demonstrate these constructs:

http://svn.macosforge.org/repository/ruby/MacRuby/trunk/spec/macruby/library/dispatch/

These are *extremely* preliminary, and lacking in both polish and documentation.  They may not be entirely correct, or even the appropriate abstractions to release as public API.  However, I wanted to get something out there to provoke feedback, so we can iterate together.  Hopefully we can also use this thread to start learning how to explain both the concepts and the API, as it evolves.

So, feedback away!

- Ernie P.




More information about the MacRuby-devel mailing list