Skip to content

Commit be25542

Browse files
committed
Updated README with information regarding concurrent-ruby-ext
1 parent 7fc55ec commit be25542

File tree

1 file changed

+56
-38
lines changed

1 file changed

+56
-38
lines changed

README.md

Lines changed: 56 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -38,9 +38,7 @@
3838
### Supported Ruby versions
3939

4040
MRI 1.9.3, 2.0, 2.1, JRuby (1.9 mode), and Rubinius 2.x are supported.
41-
Although native code is used for performance optimizations on some platforms, all functionality
42-
is available in pure Ruby. This gem should be fully compatible with any interpreter that is
43-
compliant with Ruby 1.9.3 or newer.
41+
This gem should be fully compatible with any interpreter that is compliant with Ruby 1.9.3 or newer.
4442

4543
## Features & Documentation
4644

@@ -62,6 +60,7 @@ This library contains a variety of concurrency abstractions at high and low leve
6260
* [Promise](http://ruby-concurrency.github.io/concurrent-ruby/Concurrent/Promise.html): Similar to Futures, with more features.
6361
* [ScheduledTask](http://ruby-concurrency.github.io/concurrent-ruby/Concurrent/ScheduledTask.html): Like a Future scheduled for a specific future time.
6462
* [TimerTask](http://ruby-concurrency.github.io/concurrent-ruby/Concurrent/TimerTask.html): A Thread that periodically wakes up to perform work at regular intervals.
63+
* [Channel](http://ruby-concurrency.github.io/concurrent-ruby/Concurrent/Channel.html): Communicating Sequential Processes (CSP).
6564

6665
### Java-inspired ThreadPools and other executors
6766

@@ -98,28 +97,45 @@ Lower-level abstractions mainly used as building blocks.
9897
* [thread-local variables](http://ruby-concurrency.github.io/concurrent-ruby/Concurrent/ThreadLocalVar.html)
9998
* [software transactional memory](http://ruby-concurrency.github.io/concurrent-ruby/Concurrent/TVar.html) (TVar)
10099

101-
## Installing and Building
100+
## Usage
102101

103-
This gem includes several platform-specific optimizations. To reduce the possibility of
104-
compilation errors, we provide pre-compiled gem packages for several platforms as well
105-
as a pure-Ruby build. Installing the gem should be no different than installing any other
106-
Rubygems-hosted gem. Rubygems will automatically detect your platform and install the
107-
appropriate pre-compiled build. You should never see Rubygems attempt to compile the gem
108-
on installation. Additionally, to ensure compatability with the largest possible number
109-
of Ruby interpreters, the C extensions will *never* load under any Ruby other than MRI,
110-
even when installed.
102+
All abstractions within this gem can be loaded simply by requiring it:
111103

112-
The following gem builds will be built at every release:
104+
```ruby
105+
require 'concurrent'
106+
```
113107

114-
* concurrent-ruby-x.y.z.gem (pure Ruby)
115-
* concurrent-ruby-x.y.z-java.gem (JRuby)
116-
* concurrent-ruby-x.y.z-x86-linux.gem (Linux 32-bit)
117-
* concurrent-ruby-x.y.z-x86_64-linux.gem (Linux 64-bit)
118-
* concurrent-ruby-x.y.z-x86-mingw32.gem (Windows 32-bit)
119-
* concurrent-ruby-x.y.z-x64-mingw32.gem (Windows 64-bit)
120-
* concurrent-ruby-x.y.z-x86-solaris-2.11.gem (Solaris)
108+
To reduce the amount of code loaded at runtime, subsets of this gem can be required:
121109

122-
### Installing
110+
```ruby
111+
require 'concurrent' # everything
112+
113+
# groups
114+
115+
require 'concurrent/actor' # Concurrent::Actor and supporting code
116+
require 'concurrent/atomics' # atomic and thread synchronization classes
117+
require 'concurrent/channels' # Concurrent::Channel and supporting code
118+
require 'concurrent/executors' # Thread pools and other executors
119+
require 'concurrent/utilities' # utility methods such as processor count and timers
120+
121+
# individual abstractions
122+
123+
require 'concurrent/agent' # Concurrent::Agent
124+
require 'concurrent/async' # Concurrent::Async
125+
require 'concurrent/atomic' # Concurrent::Atomic (formerly the `atomic` gem)
126+
require 'concurrent/dataflow' # Concurrent::dataflow
127+
require 'concurrent/delay' # Concurrent::Delay
128+
require 'concurrent/exchanger' # Concurrent::Exchanger
129+
require 'concurrent/future' # Concurrent::Future
130+
require 'concurrent/ivar' # Concurrent::IVar
131+
require 'concurrent/mvar' # Concurrent::MVar
132+
require 'concurrent/promise' # Concurrent::Promise
133+
require 'concurrent/scheduled_task' # Concurrent::ScheduledTask
134+
require 'concurrent/timer_task' # Concurrent::TimerTask
135+
require 'concurrent/tvar' # Concurrent::TVar
136+
```
137+
138+
## Installation
123139

124140
```shell
125141
gem install concurrent-ruby
@@ -133,40 +149,42 @@ gem 'concurrent-ruby'
133149

134150
and run `bundle install` from your shell.
135151

136-
### Building
152+
### C Extensions for MRI
137153

138-
Because we provide pre-compiled gem builds, users should never need to build the gem manually.
139-
The build process for this gem is completely automated using open source tools. All of
140-
the automation components are available in the [ruby-concurrency/rake-compiler-dev-box](https://github.com/ruby-concurrency/rake-compiler-dev-box)
141-
GitHub repository.
154+
Potential performance improvements may be achieved under MRI by installing optional C extensions.
155+
To minimize installation errors the C extensions are available in the `concurrent-ruby-ext` extension
156+
gem. The extension gem lists `concurrent-ruby` as a dependency so it is not necessary to install both.
157+
Simply install the extension gen:
142158

143-
This gem will compile native C code under MRI and native Java code under JRuby. It is
144-
also possible to build a pure-Ruby version. All builds have identical functionality.
145-
The only difference is performance. Additionally, pure-Ruby classes are always available,
146-
even when using the native optimizations. Please see the [documentation](http://ruby-concurrency.github.io/concurrent-ruby/)
147-
for more details.
159+
```shell
160+
gem install concurrent-ruby-ext
161+
```
148162

149-
To build and package the gem using MRI or JRuby, install the necessary build dependencies and run:
163+
or add the following line to Gemfile:
150164

151-
```shell
152-
bundle exec rake compile
153-
bundle exec rake build
165+
```ruby
166+
gem 'concurrent-ruby-ext'
154167
```
155168

156-
To build and package a pure-Ruby gem, on *any* platform and interpreter
157-
(including MRI and JRuby), run:
169+
and run `bundle install` from your shell.
170+
171+
In code it is only necessary to
158172

159173
```shell
160-
BUILD_PURE_RUBY='true' bundle exec rake build
174+
require 'concurrent'
161175
```
162176

177+
The `concurrent-ruby` gem will automatically detect the presence of the `concurrent-ruby-ext` gem
178+
and load the appropriate C extensions.
179+
163180
## Maintainers
164181

165182
* [Jerry D'Antonio](https://github.com/jdantonio)
166183
* [Michele Della Torre](https://github.com/mighe)
167184
* [Chris Seaton](https://github.com/chrisseaton)
168185
* [Lucas Allan](https://github.com/lucasallan)
169186
* [Petr Chalupa](https://github.com/pitr-ch)
187+
* [Paweł Obrok](https://github.com/obrok)
170188

171189
### Contributing
172190

0 commit comments

Comments
 (0)