[ANN] celluloid/celluloid-io/celluloid-zmq/dcell 0.9.0: Actors for Ruby

Celluloid is an easy-to-use library for building fault-tolerant
concurrent programs in Ruby:

Celluloid::IO provides evented I/O for Celluloid actors, similar to
EventMachine but with a synchronous API:

DCell lets you build distributed actor systems ala DRb that talk over
the 0MQ protocol, using the Celluloid::ZMQ library:


https://github.com/tarcieri/dcell/tree/master/celluloid-zmq

···

--

Celluloid 0.9.0 contains some of the most requested features:

* Celluloid::Pool provides round-robin load distribution across
configurable pool sizes
* Celluloid now attempts a graceful shutdown of all actors at exit
* Celluloid#exclusive prevents Fiber-switching during calls
* Celluloid.exception_handler { |ex| ... } lets you hook into custom
error reporting tools like Airbrake

--

Celluloid::IO 0.9.0 represents the first "real" release of this
library and is in a generally usable state for servers. This release
introduces three new classes:

* Celluloid::IO::TCPServer
* Celluloid::IO::TCPSocket
* Celluloid::IO::UDPSocket

These classes have partial duck-type compatibility with their cousins
from the Ruby standard library. They provide non-blocking "evented" IO
inside of Celluloid::IO actors, and blocking IO everywhere else.

This means unlike EventMachine, you don't have to rewrite every single
library in a callback-driven style to take advantage of non-blocking
I/O. With a small change to support injection of a custom socket type,
any library presently written using the socket types from the Ruby
standard library can take advantage of nonblocking "evented" IO.

A proof-of-concept web server written with Celluloid::IO is available here:

--

Celluloid::ZMQ 0.9.0 contains a brand-new API which wraps ffi-rzmq in
a similar manner to the way Celluloid::IO wraps Ruby's standard
sockets. 0MQ sockets automatically take advantage of non-blocking
evented behavior inside of Celluloid::ZMQ actors.

Each of the 0MQ socket types now has its own class:

* Celluloid::ZMQ::PushSocket
* Celluloid::ZMQ::PullSocket
* Celluloid::ZMQ::ReqSocket
* Celluloid::ZMQ::RepSocket
* Celluloid::ZMQ::PubSocket
* Celluloid::ZMQ::SubSocket

DCell 0.9.0 doesn't contain any major new features or functionality,
but does contain updates to use the new Celluloid::ZMQ API.

--

Full changelogs follow:

Celluloid 0.9.0:

* Celluloid::Pool supervises pools of actors
* Graceful shutdown which calls #terminate on all actors
* Celluloid::Actor.all returns all running actors
* Celluloid#exclusive runs a high priority block which prevents other methods
from executing
* Celluloid.exception_handler { |ex| ... } defines a callback for notifying
exceptions (for use with Airbrake, exception_notifier, etc.)

Celluloid::IO 0.9.0:

* TCPServer, TCPSocket, and UDPSocket classes in Celluloid::IO namespace
  with both evented and blocking I/O support
* Celluloid::IO::Mailbox.new now takes a single parameter to specify an
  alternative reactor (e.g. Celluloid::ZMQ::Reactor)

Celluloid::ZMQ 0.9.0:

* New 0MQ APIs which wrap ffi-rzmq's
* Terminate the 0MQ context at shutdown
* Use Celluloid::IO 0.9.0's reactor injection support so we no longer have to
  subclass Celluloid::IO::Mailbox

DCell 0.9.0:

* Use new Celluloid::ZMQ APIs

--
Tony Arcieri