|
9 | 9 | [](http://opensource.org/licenses/MIT)
|
10 | 10 | [-devs%20%26%20users-brightgreen.svg)](https://gitter.im/ruby-concurrency/concurrent-ruby)
|
11 | 11 |
|
12 |
| -<table> |
13 |
| - <tr> |
14 |
| - <td align="left" valign="top"> |
15 |
| - <p> |
16 |
| - Modern concurrency tools for Ruby. Inspired by |
17 |
| - <a href="http://www.erlang.org/doc/reference_manual/processes.html">Erlang</a>, |
18 |
| - <a href="http://clojure.org/concurrent_programming">Clojure</a>, |
19 |
| - <a href="http://akka.io/">Scala</a>, |
20 |
| - <a href="http://www.haskell.org/haskellwiki/Applications_and_libraries/Concurrency_and_parallelism#Concurrent_Haskell">Haskell</a>, |
21 |
| - <a href="http://blogs.msdn.com/b/dsyme/archive/2010/02/15/async-and-parallel-design-patterns-in-f-part-3-agents.aspx">F#</a>, |
22 |
| - <a href="http://msdn.microsoft.com/en-us/library/vstudio/hh191443.aspx">C#</a>, |
23 |
| - <a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/package-summary.html">Java</a>, |
24 |
| - and classic concurrency patterns. |
25 |
| - </p> |
26 |
| - <p> |
27 |
| - The design goals of this gem are: |
28 |
| - <ul> |
29 |
| - <li>Be an 'unopinionated' toolbox that provides useful utilities without debating which is better or why</li> |
30 |
| - <li>Remain free of external gem dependencies</li> |
31 |
| - <li>Stay true to the spirit of the languages providing inspiration</li> |
32 |
| - <li>But implement in a way that makes sense for Ruby</li> |
33 |
| - <li>Keep the semantics as idiomatic Ruby as possible</li> |
34 |
| - <li>Support features that make sense in Ruby</li> |
35 |
| - <li>Exclude features that don't make sense in Ruby</li> |
36 |
| - <li>Be small, lean, and loosely coupled</li> |
37 |
| - </ul> |
38 |
| - </p> |
39 |
| - </td> |
40 |
| - <td align="right" valign="top"> |
41 |
| - <img src="https://raw.githubusercontent.com/ruby-concurrency/concurrent-ruby/master/doc/logo/concurrent-ruby-logo-300x300.png"/> |
42 |
| - </td> |
43 |
| - </tr> |
44 |
| -</table> |
| 12 | +Modern concurrency tools for Ruby. Inspired by |
| 13 | +[Erlang](http://www.erlang.org/doc/reference_manual/processes.html), |
| 14 | +[Clojure](http://clojure.org/concurrent_programming), |
| 15 | +[Scala](http://akka.io/), |
| 16 | +[Haskell](http://www.haskell.org/haskellwiki/Applications_and_libraries/Concurrency_and_parallelism#Concurrent_Haskell), |
| 17 | +[F#](http://blogs.msdn.com/b/dsyme/archive/2010/02/15/async-and-parallel-design-patterns-in-f-part-3-agents.aspx), |
| 18 | +[C#](http://msdn.microsoft.com/en-us/library/vstudio/hh191443.aspx), |
| 19 | +[Java](http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/package-summary.html), |
| 20 | +and classic concurrency patterns. |
| 21 | + |
| 22 | +<img src="https://raw.githubusercontent.com/ruby-concurrency/concurrent-ruby/master/doc/logo/concurrent-ruby-logo-300x300.png" align="right" style="margin-left: 20px;" /> |
| 23 | + |
| 24 | +The design goals of this gem are: |
| 25 | + |
| 26 | +* Be an 'unopinionated' toolbox that provides useful utilities without debating which is better or why |
| 27 | +* Remain free of external gem dependencies |
| 28 | +* Stay true to the spirit of the languages providing inspiration |
| 29 | +* But implement in a way that makes sense for Ruby |
| 30 | +* Keep the semantics as idiomatic Ruby as possible |
| 31 | +* Support features that make sense in Ruby |
| 32 | +* Exclude features that don't make sense in Ruby |
| 33 | +* Be small, lean, and loosely coupled |
45 | 34 |
|
46 | 35 | ### Supported Ruby versions
|
47 | 36 |
|
@@ -127,29 +116,30 @@ These features are under active development and may change frequently. They are
|
127 | 116 | keep backward compatibility (there may also lack tests and documentation). Semantic versions will
|
128 | 117 | be obeyed though. Features developed in `concurrent-ruby-edge` are expected to move to `concurrent-ruby` when final.
|
129 | 118 |
|
130 |
| -* [Actor](http://ruby-concurrency.github.io/concurrent-ruby/Concurrent/Actor.html): |
131 |
| - Implements the Actor Model, where concurrent actors exchange messages. |
132 |
| -* [New Future Framework](http://ruby-concurrency.github.io/concurrent-ruby/Concurrent/Edge/FutureShortcuts.html): |
| 119 | +* [Promises Framework](http://ruby-concurrency.github.io/concurrent-ruby/Concurrent/Promises.html): |
133 | 120 | Unified implementation of futures and promises which combines features of previous `Future`,
|
134 | 121 | `Promise`, `IVar`, `Event`, `dataflow`, `Delay`, and `TimerTask` into a single framework. It extensively uses the
|
135 | 122 | new synchronization layer to make all the features **non-blocking** and **lock-free**, with the exception of obviously blocking
|
136 | 123 | operations like `#wait`, `#value`. It also offers better performance.
|
| 124 | +* [Actor](http://ruby-concurrency.github.io/concurrent-ruby/Concurrent/Actor.html): |
| 125 | + Implements the Actor Model, where concurrent actors exchange messages. |
137 | 126 | * [Channel](http://ruby-concurrency.github.io/concurrent-ruby/Concurrent/Edge/Channel.html):
|
138 | 127 | Communicating Sequential Processes ([CSP](https://en.wikipedia.org/wiki/Communicating_sequential_processes)).
|
139 | 128 | Functionally equivalent to Go [channels](https://tour.golang.org/concurrency/2) with additional
|
140 | 129 | inspiration from Clojure [core.async](https://clojure.github.io/core.async/).
|
141 | 130 | * [LazyRegister](http://ruby-concurrency.github.io/concurrent-ruby/Concurrent/LazyRegister.html)
|
142 | 131 | * [AtomicMarkableReference](http://ruby-concurrency.github.io/concurrent-ruby/Concurrent/Edge/AtomicMarkableReference.html)
|
143 | 132 | * [LockFreeLinkedSet](http://ruby-concurrency.github.io/concurrent-ruby/Concurrent/Edge/LockFreeLinkedSet.html)
|
144 |
| -* [LockFreeStack](http://ruby-concurrency.github.io/concurrent-ruby/Concurrent/Edge/LockFreeStack.html) |
| 133 | +* [LockFreeStack](http://ruby-concurrency.github.io/concurrent-ruby/Concurrent/LockFreeStack.html) |
145 | 134 |
|
146 | 135 | #### Statuses:
|
147 | 136 |
|
148 | 137 | *Why are these not in core?*
|
149 | 138 |
|
| 139 | +- **Promises Framework** - They are being finalized to be able to be moved to core. They'll deprecate old |
| 140 | + implementation. |
150 | 141 | - **Actor** - Partial documentation and tests; depends on new future/promise framework; stability is good.
|
151 | 142 | - **Channel** - Brand new implementation; partial documentation and tests; stability is good.
|
152 |
| -- **Future/Promise Framework** - API changes; partial documentation and tests; stability is good. |
153 | 143 | - **LazyRegister** - Missing documentation and tests.
|
154 | 144 | - **AtomicMarkableReference, LockFreeLinkedSet, LockFreeStack** - Need real world battle testing.
|
155 | 145 |
|
|
0 commit comments