-
Notifications
You must be signed in to change notification settings - Fork 419
Description
The other day @chrisseaton suggested to me that we should begin to plan what 1.0.0 will look like. I think this is an excellent idea. When I started this gem I was just creating a bunch of tools that I thought might be useful. I did not plan a feature set. I am open to all ideas and suggestions. We will use this thread to collectively create a new roadmap.
Below are a few things I would like to accomplish on the way to 1.0.0. These ideas are just a starting point.
Simple, Robust Actors
The actor model is becoming a very popular approach to concurrency. As an Erlang programmer I am partial to Erlang's processes, but they are tightly coupled to features of the Erlang runtime that we can't do in Ruby. I'd like an Actor
implementation that supports a couple of key features:
- Supports both local and remote messaging
- Pluggable transport layer for remote actor
- Supports supervision
- Simple, fluent, and easy to use (no deep coupling and unnecessary internal complexity like many actor frameworks)
More Low Low Level Abstractions
There are many advanced concurrency abstractions in other languages that provide powerful, unique features. These abstractions may not have the broad appeal of Future
but they make for an excellent "toolbox" for concurrency. They are also great building blocks for the high level abstractions. I'd like to see more of these in the gem. Some examples include:
- Parallel enumerations, like the .NET Parallel class
- Exchanger, CyclicBarrier, (suggested by @mighe) and other cool stuff from java.util.concurrent
- Simple Software Transactional Memory
More JRuby Optimizations
I hope this gem always remains interpreter-agnostic and I plan to always test against MRI/CRuby, JRuby, and Rubinius, but the JVM is definitely very friendly concurrency/parallelism. We've already implemented a few JVM-specific optimizations (AtomicFixnum
and ThreadLocalVar
) but I'd like to see us do this as often as possible.