|
| 1 | +### Upcoming Release v0.7.1 (TBD) |
| 2 | + |
| 3 | +Please see the [roadmap](https://github.com/ruby-concurrency/concurrent-ruby/issues/142) for more information on the next planned release. |
| 4 | + |
| 5 | +* Added `flat_map` method to `Promise` |
| 6 | +* Added `zip` method to `Promise` |
| 7 | +* Fixed bug with logging in `Actor` |
| 8 | +* Improvements to `Promise` tests |
| 9 | +* Removed actor-experimental warning |
| 10 | +* Added an `IndirectImmediateExecutor` class |
| 11 | +* Allow disabling auto termination of global executors |
| 12 | +* Fix thread leaking in `ThreadLocalVar` (uses `Ref` gem on non-JRuby systems) |
| 13 | +* Fix thread leaking when pruning pure-Ruby thread pools |
| 14 | +* Prevent `Actor` from using an `ImmediateExecutor` (causes deadlock) |
| 15 | +* Added missing synchronizations to `TimerSet` |
| 16 | +* Removed confusing warning when not using native extenstions |
| 17 | +* Improved documentation |
| 18 | + |
| 19 | +## Current Release v0.7.0 (13 August 2014) |
| 20 | + |
| 21 | +* Merge the [atomic](https://github.com/ruby-concurrency/atomic) gem |
| 22 | + - Pure Ruby `MutexAtomic` atomic reference class |
| 23 | + - Platform native atomic reference classes `CAtomic`, `JavaAtomic`, and `RbxAtomic` |
| 24 | + - Automated [build process](https://github.com/ruby-concurrency/rake-compiler-dev-box) |
| 25 | + - Fat binary releases for [multiple platforms](https://rubygems.org/gems/concurrent-ruby/versions) including Windows (32/64), Linux (32/64), OS X (64-bit), Solaris (64-bit), and JRuby |
| 26 | +* C native `CAtomicBoolean` |
| 27 | +* C native `CAtomicFixnum` |
| 28 | +* Refactored intermittently failing tests |
| 29 | +* Added `dataflow!` and `dataflow_with!` methods to match `Future#value!` method |
| 30 | +* Better handling of timeout in `Agent` |
| 31 | +* Actor Improvements |
| 32 | + - Fine-grained implementation using chain of behaviors. Each behavior is responsible for single aspect like: `Termination`, `Pausing`, `Linking`, `Supervising`, etc. Users can create custom Actors easily based on their needs. |
| 33 | + - Supervision was added. `RestartingContext` will pause on error waiting on its supervisor to decide what to do next ( options are `:terminate!`, `:resume!`, `:reset!`, `:restart!`). Supervising behavior also supports strategies `:one_for_one` and `:one_for_all`. |
| 34 | + - Linking was added to be able to monitor actor's events like: `:terminated`, `:paused`, `:restarted`, etc. |
| 35 | + - Dead letter routing added. Rejected envelopes are collected in a configurable actor (default: `Concurrent::Actor.root.ask!(:dead_letter_routing)`) |
| 36 | + - Old `Actor` class removed and replaced by new implementation previously called `Actress`. `Actress` was kept as an alias for `Actor` to keep compatibility. |
| 37 | + - `Utils::Broadcast` actor which allows Publish–subscribe pattern. |
| 38 | +* More executors for managing serialized operations |
| 39 | + - `SerializedExecution` mixin module |
| 40 | + - `SerializedExecutionDelegator` for serializing *any* executor |
| 41 | +* Updated `Async` with serialized execution |
| 42 | +* Updated `ImmediateExecutor` and `PerThreadExecutor` with full executor service lifecycle |
| 43 | +* Added a `Delay` to root `Actress` initialization |
| 44 | +* Minor bug fixes to thread pools |
| 45 | +* Refactored many intermittently failing specs |
| 46 | +* Removed Java interop warning `executor.rb:148 warning: ambiguous Java methods found, using submit(java.lang.Runnable)` |
| 47 | +* Fixed minor bug in `RubyCachedThreadPool` overflow policy |
| 48 | +* Updated tests to use [RSpec 3.0](http://myronmars.to/n/dev-blog/2014/05/notable-changes-in-rspec-3) |
| 49 | +* Removed deprecated `Actor` class |
| 50 | +* Better support for Rubinius |
| 51 | + |
| 52 | +### Release v0.6.1 (14 June 2014) |
| 53 | + |
| 54 | +* Many improvements to `Concurrent::Actress` |
| 55 | +* Bug fixes to `Concurrent::RubyThreadPoolExecutor` |
| 56 | +* Fixed several brittle tests |
| 57 | +* Moved documentation to http://ruby-concurrency.github.io/concurrent-ruby/frames.html |
| 58 | + |
| 59 | +### Release v0.6.0 (25 May 2014) |
| 60 | + |
| 61 | +* Added `Concurrent::Observable` to encapsulate our thread safe observer sets |
| 62 | +* Improvements to new `Channel` |
| 63 | +* Major improvements to `CachedThreadPool` and `FixedThreadPool` |
| 64 | +* Added `SingleThreadExecutor` |
| 65 | +* Added `Current::timer` function |
| 66 | +* Added `TimerSet` executor |
| 67 | +* Added `AtomicBoolean` |
| 68 | +* `ScheduledTask` refactoring |
| 69 | +* Pure Ruby and JRuby-optimized `PriorityQueue` classes |
| 70 | +* Updated `Agent` behavior to more closely match Clojure |
| 71 | +* Observer sets support block callbacks to the `add_observer` method |
| 72 | +* New algorithm for thread creation in `RubyThreadPoolExecutor` |
| 73 | +* Minor API updates to `Event` |
| 74 | +* Rewritten `TimerTask` now an `Executor` instead of a `Runnable` |
| 75 | +* Fixed many brittle specs |
| 76 | +* Renamed `FixedThreadPool` and `CachedThreadPool` to `RubyFixedThreadPool` and `RubyCachedThreadPool` |
| 77 | +* Created JRuby optimized `JavaFixedThreadPool` and `JavaCachedThreadPool` |
| 78 | +* Consolidated fixed thread pool tests into `spec/concurrent/fixed_thread_pool_shared.rb` and `spec/concurrent/cached_thread_pool_shared.rb` |
| 79 | +* `FixedThreadPool` now subclasses `RubyFixedThreadPool` or `JavaFixedThreadPool` as appropriate |
| 80 | +* `CachedThreadPool` now subclasses `RubyCachedThreadPool` or `JavaCachedThreadPool` as appropriate |
| 81 | +* New `Delay` class |
| 82 | +* `Concurrent::processor_count` helper function |
| 83 | +* New `Async` module |
| 84 | +* Renamed `NullThreadPool` to `PerThreadExecutor` |
| 85 | +* Deprecated `Channel` (we are planning a new implementation based on [Go](http://golangtutorials.blogspot.com/2011/06/channels-in-go.html)) |
| 86 | +* Added gem-level [configuration](http://robots.thoughtbot.com/mygem-configure-block) |
| 87 | +* Deprecated `$GLOBAL_THREAD_POOL` in lieu of gem-level configuration |
| 88 | +* Removed support for Ruby [1.9.2](https://www.ruby-lang.org/en/news/2013/12/17/maintenance-of-1-8-7-and-1-9-2/) |
| 89 | +* New `RubyThreadPoolExecutor` and `JavaThreadPoolExecutor` classes |
| 90 | +* All thread pools now extend the appropriate thread pool executor classes |
| 91 | +* All thread pools now support `:overflow_policy` (based on Java's [reject policies](http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ThreadPoolExecutor.html)) |
| 92 | +* Deprecated `UsesGlobalThreadPool` in lieu of explicit `:executor` option (dependency injection) on `Future`, `Promise`, and `Agent` |
| 93 | +* Added `Concurrent::dataflow_with(executor, *inputs)` method to support executor dependency injection for dataflow |
| 94 | +* Software transactional memory with `TVar` and `Concurrent::atomically` |
| 95 | +* First implementation of [new, high-performance](https://github.com/ruby-concurrency/concurrent-ruby/pull/49) `Channel` |
| 96 | +* `Actor` is deprecated in favor of new experimental actor implementation [#73](https://github.com/ruby-concurrency/concurrent-ruby/pull/73). To avoid namespace collision it is living in `Actress` namespace until `Actor` is removed in next release. |
| 97 | + |
| 98 | +### Release v0.5.0 |
| 99 | + |
| 100 | +This is the most significant release of this gem since its inception. This release includes many improvements and optimizations. It also includes several bug fixes. The major areas of focus for this release were: |
| 101 | + |
| 102 | +* Stability improvements on Ruby versions with thread-level parallelism ([JRuby](http://jruby.org/) and [Rubinius](http://rubini.us/)) |
| 103 | +* Creation of new low-level concurrency abstractions |
| 104 | +* Internal refactoring to use the new low-level abstractions |
| 105 | + |
| 106 | +Most of these updates had no effect on the gem API. There are a few notable exceptions which were unavoidable. Please read the [release notes](API-Updates-in-v0.5.0) for more information. |
| 107 | + |
| 108 | +Specific changes include: |
| 109 | + |
| 110 | +* New class `IVar` |
| 111 | +* New class `MVar` |
| 112 | +* New class `ThreadLocalVar` |
| 113 | +* New class `AtomicFixnum` |
| 114 | +* New class method `dataflow` |
| 115 | +* New class `Condition` |
| 116 | +* New class `CountDownLatch` |
| 117 | +* New class `DependencyCounter` |
| 118 | +* New class `SafeTaskExecutor` |
| 119 | +* New class `CopyOnNotifyObserverSet` |
| 120 | +* New class `CopyOnWriteObserverSet` |
| 121 | +* `Future` updated with `execute` API |
| 122 | +* `ScheduledTask` updated with `execute` API |
| 123 | +* New `Promise` API |
| 124 | +* `Future` now extends `IVar` |
| 125 | +* `Postable#post?` now returns an `IVar` |
| 126 | +* Thread safety fixes to `Dereferenceable` |
| 127 | +* Thread safety fixes to `Obligation` |
| 128 | +* Thread safety fixes to `Supervisor` |
| 129 | +* Thread safety fixes to `Event` |
| 130 | +* Various other thread safety (race condition) fixes |
| 131 | +* Refactored brittle tests |
| 132 | +* Implemented pending tests |
| 133 | +* Added JRuby and Rubinius as Travis CI build targets |
| 134 | +* Added [CodeClimate](https://codeclimate.com/) code review |
| 135 | +* Improved YARD documentation |
0 commit comments