Celluloid(::IO/ZMQ/DCell) 0.16.0: actor-based concurrent objects for Ruby

Celluloid is a concurrent object oriented programming framework for Ruby
which lets you build multithreaded programs out of concurrent objects,
a.k.a. “cells”, in a similar manner to how you build sequential programs
out of plain old Ruby objects.

Web sites:

Twitter:

https://twitter.com/celluloidrb

Celluloid 0.16 is a major release containing some sweeping changes and
represents a year’s worth of development effort, much of which has been
spent trying to stabilize it prior to release. That said, there are
still a
handful of issues (see
0.16.1? · Issue #457 · celluloid/celluloid · GitHub),
so users should upgrade with caution.

Previously, Celluloid used the term “actor” to describe its concurrent
objects, however concurrent objects, even when built on actors, are a
higher level abstraction than what the actor model’s creator, Carl
Hewitt,
originally formulated, and much closer to what Erlang calls a
“gen_server”.

Celluloid 0.16 splits out concurrent objects from a much more minimal,
Erlangy core actor type. We’re now using the term “cell” to refer to
concurrent objects to differentiate them from the core actors on which
cells are built. I’d like to thank Tim Carey-Smith for all his hard work
making this happen.

We expect 0.16 will be the last major release before 1.0 and would like
to
spend the remaining time prior to a 1.0 release stabilizing the codebase
and finalizing any changes to the API. We also plan on merging the git
repositories for celluloid, celluloid-io, celluloid-zmq, and dcell into
a
single omnirepo ala Rails.

Full Celluloid 0.16 changelog below:

  • Factor apart Celluloid::Cell (concurrent objects) from
    Celluloid::Actor
  • Introduce Celluloid::ActorSystem as an abstraction around the backend
    actor implementation (idea borrowed from Akka)
  • Celluloid::Probe system for monitoring system behavior
  • Fix handling of timeouts with Celluloid::EventedMailbox (i.e.
    Celluloid::IO and Celluloid::ZMQ)
  • Add timeout support to Celluloid::Condition
  • Obtain actor names via Celluloid::Actor.registered_name and
    #registered_name to avoid conflicts with the built-in Ruby Class.name
    method
  • Update to timers 4.0.0 (uses hitimes for monotonic time)
  • Dynamically resizable pools
  • Remove use of core Ruby ThreadGroups (they’re broken and aren’t thread
    safe)
  • Simplified CPU core detector

Celluloid::IO 0.16 changelog:

  • Fix handling of simultaneous read/write interests
  • Use Resolv::DNS::Config to obtain nameservers
  • Celluloid::IO.copy_stream support (uses a background thread)

Celluloid::ZMQ 0.16 changelog:

  • Support for adding socket options
  • More tests!

DCell 0.16 changelog:

  • Timeouts for cell discovery
  • Update Explorer to use new Reel API