From: Tony Arcieri Date: 2012-09-05T02:17:03+09:00 Subject: [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