[ANN] celluloid 0.12.0: concurrent objects for Ruby (with IO and ZMQ too!)

Celluloid is a concurrent object oriented programming framework for
Ruby based on the actor model:

http://celluloid.io

Celluloid 0.12.0 is one of the biggest releases of Celluloid ever,
packed with bugfixes and new features.

The biggest change is a new syntax for asynchronous methods and
futures. Celluloid previously used "mymethod!" predicate syntax to
differentiate asynchronous method calls from synchronous method calls.
This was by far the most complained about aspect of Celluloid. That
said, I am officially deprecating this syntax and it will be removed
in Celluloid 1.0. There aren't any deprecation warnings yet but expect
them in the next release (which will hopefully be the last before
1.0).

The new syntax is as follows:

- Sync: actor.mymethod
- Async: actor.async.mymethod
- Future: actor.future.mymethod

Calling async or future without any arguments returns a separate proxy
object which makes all calls to it async or futures accordingly.
Similarly, an "async" method is available inside an actor if you want
to defer work (i.e. where you used "run!" previously just use
"async.run")

Calling async or future with arguments still provides (and will
continue to provide) the original send-like syntax.

Once the original predicate syntax is removed in Celluloid 1.0, bang
methods on actors will be available for you to use again.

ยทยทยท

--

Full changelog follows:

* Alternative async syntax: actor.async.method in lieu of
actor.method! Original syntax still available but will be removed in
Celluloid 1.0
* Alternative future syntax: actor.future.method in lieu of future(:method)
* All methods in the Celluloid module are now available on its singleton
* The #join and #kill methods are no longer available on the actor
proxy. Please use Celluloid::Actor.join(actor) and .kill(actor)
instead.
* Celluloid::Future#ready? can be used to query for future readiness
* Celluloid::Group constant removed. Please use Celluloid::SupervisionGroup
* #monitor, #unmonitor, and #monitoring? provide unidirectional linking
* Linking is now performed via a SystemEvent
* SystemEvents are no longer exceptions. Boo exceptions as flow control!
* Celluloid::Mailbox#system_event eliminated and replaced with
Mailbox#<< SystemEvents are now automatically high priority
* The task_class class method can be used to override the class used
for tasks, allowing different task implementations to be configured on
an actor-by-actor-basis
* Celluloid::TaskThread provides tasks backed by Threads instead of Fibers
* ActorProxy is now a BasicObject
* A bug prevented Celluloid subclasses from retaining custom mailboxes
defined by use_mailbox. This is now fixed.
* exclusive class method without arguments makes the whole actor exclusive

--
Tony Arcieri