concurrent-ruby-edge 0.1.0 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 3d078f232b2a8d30df70a0d008daeaee93884f58
4
- data.tar.gz: 767e96651e435eb373a2751fb11bd45fc336ab51
3
+ metadata.gz: 5a3b78f7dce2948e4cb684345370e8383d9b179c
4
+ data.tar.gz: d4ffa926ffbeaf4a33d06b3384a4cea42df04934
5
5
  SHA512:
6
- metadata.gz: 231af4d7c79ca4bba8ec44d262b893a62a1a935bf6345a55dae736e55dc524e1939c8ee869b6c6c1f727e8f42a8134f71392f6dcac2056e717975db991b9a58a
7
- data.tar.gz: 5f1df67b0ba95a112067cbf69dfd3301c26e44430d97c6f7120ee30efad6a2261d7c52decdfa70c572ac567e7710f355c194b148b6f7944ea3d07a313ecbd5f1
6
+ metadata.gz: ff2aa5ea7845498b082ab4e21b912f58fad92bea079cbb273c0973e2c4999c1e467bdaf7d0cf749ca44b40d5143dfc298eefa68e3e9a89ca7b0f808240e9d211
7
+ data.tar.gz: 777e75d09d3d2cd0962d601385bb6566bd77b4855f9ad3d56d49cafe485d3f5631772e5dd6b54969ee2a96ab898852207944d9e784f33063866023cc4ad348ee
data/README.md CHANGED
@@ -1,5 +1,13 @@
1
1
  # Concurrent Ruby
2
- [![Gem Version](https://badge.fury.io/rb/concurrent-ruby.svg)](http://badge.fury.io/rb/concurrent-ruby) [![Build Status](https://travis-ci.org/ruby-concurrency/concurrent-ruby.svg?branch=master)](https://travis-ci.org/ruby-concurrency/concurrent-ruby) [![Build status](https://ci.appveyor.com/api/projects/status/iq8aboyuu3etad4w?svg=true)](https://ci.appveyor.com/project/rubyconcurrency/concurrent-ruby) [![Code Climate](https://codeclimate.com/github/ruby-concurrency/concurrent-ruby.svg)](https://codeclimate.com/github/ruby-concurrency/concurrent-ruby) [![Inline docs](http://inch-ci.org/github/ruby-concurrency/concurrent-ruby.svg)](http://inch-ci.org/github/ruby-concurrency/concurrent-ruby) [![Dependency Status](https://gemnasium.com/ruby-concurrency/concurrent-ruby.svg)](https://gemnasium.com/ruby-concurrency/concurrent-ruby) [![License](https://img.shields.io/badge/license-MIT-green.svg)](http://opensource.org/licenses/MIT) [![Gitter chat](http://img.shields.io/badge/gitter-join%20chat%20%E2%86%92-brightgreen.svg)](https://gitter.im/ruby-concurrency/concurrent-ruby)
2
+
3
+ [![Gem Version](https://badge.fury.io/rb/concurrent-ruby.svg)](http://badge.fury.io/rb/concurrent-ruby)
4
+ [![Build Status](https://travis-ci.org/ruby-concurrency/concurrent-ruby.svg?branch=master)](https://travis-ci.org/ruby-concurrency/concurrent-ruby)
5
+ [![Build status](https://ci.appveyor.com/api/projects/status/iq8aboyuu3etad4w?svg=true)](https://ci.appveyor.com/project/rubyconcurrency/concurrent-ruby)
6
+ [![Code Climate](https://codeclimate.com/github/ruby-concurrency/concurrent-ruby.svg)](https://codeclimate.com/github/ruby-concurrency/concurrent-ruby)
7
+ [![Inline docs](http://inch-ci.org/github/ruby-concurrency/concurrent-ruby.svg)](http://inch-ci.org/github/ruby-concurrency/concurrent-ruby)
8
+ [![Dependency Status](https://gemnasium.com/ruby-concurrency/concurrent-ruby.svg)](https://gemnasium.com/ruby-concurrency/concurrent-ruby)
9
+ [![License](https://img.shields.io/badge/license-MIT-green.svg)](http://opensource.org/licenses/MIT)
10
+ [![Gitter chat](https://img.shields.io/badge/IRC%20(gitter)-devs%20%26%20users-brightgreen.svg)](https://gitter.im/ruby-concurrency/concurrent-ruby)
3
11
 
4
12
  <table>
5
13
  <tr>
@@ -43,13 +51,13 @@ Java 8 is required for JRuby (Java 7 support is deprecated in version 0.9 and wi
43
51
 
44
52
  ## Features & Documentation
45
53
 
46
- We have a roadmap guiding our work toward the [v1.0.0 release](https://github.com/ruby-concurrency/concurrent-ruby/wiki/v1.0-Roadmap).
54
+ We have a roadmap guiding our work toward the [v1.0.0 release](https://github.com/ruby-concurrency/concurrent-ruby/issues/257).
47
55
 
48
56
  The primary site for documentation is the automatically generated [API documentation](http://ruby-concurrency.github.io/concurrent-ruby/frames.html)
49
57
 
50
- We also have a [mailing list](http://groups.google.com/group/concurrent-ruby).
58
+ We also have a [mailing list](http://groups.google.com/group/concurrent-ruby) and [IRC (gitter)](https://gitter.im/ruby-concurrency/concurrent-ruby).
51
59
 
52
- This library contains a variety of concurrency abstractions at high and low levels. One of the high-level abstractions is likely to meet most common needs.
60
+ This library contains a variety of concurrency abstractions at high and low levels. One of the high-level abstractions is likely to meet most common needs.
53
61
 
54
62
  #### General-purpose Concurrency Abstractions
55
63
 
@@ -59,7 +67,7 @@ This library contains a variety of concurrency abstractions at high and low leve
59
67
  * [Dataflow](http://ruby-concurrency.github.io/concurrent-ruby/Concurrent.html#dataflow-class_method): Built on Futures, Dataflow allows you to create a task that will be scheduled when all of its data dependencies are available.
60
68
  * [Promise](http://ruby-concurrency.github.io/concurrent-ruby/Concurrent/Promise.html): Similar to Futures, with more features.
61
69
  * [ScheduledTask](http://ruby-concurrency.github.io/concurrent-ruby/Concurrent/ScheduledTask.html): Like a Future scheduled for a specific future time.
62
- * [TimerTask](http://ruby-concurrency.github.io/concurrent-ruby/Concurrent/TimerTask.html): A Thread that periodically wakes up to perform work at regular intervals.
70
+ * [TimerTask](http://ruby-concurrency.github.io/concurrent-ruby/Concurrent/TimerTask.html): A Thread that periodically wakes up to perform work at regular intervals.
63
71
 
64
72
  #### Thread-safe Value Objects
65
73
 
@@ -97,6 +105,7 @@ Derived from Ruby's [Struct](http://ruby-doc.org/core-2.2.0/Struct.html):
97
105
  * [Thread-local variables](http://ruby-concurrency.github.io/concurrent-ruby/Concurrent/ThreadLocalVar.html)
98
106
  * [Software transactional memory](http://ruby-concurrency.github.io/concurrent-ruby/Concurrent/TVar.html) (TVar)
99
107
  * [ReadWriteLock](http://ruby-concurrency.github.io/concurrent-ruby/Concurrent/ReadWriteLock.html)
108
+ * [ReentrantReadWriteLock](http://ruby-concurrency.github.io/concurrent-ruby/Concurrent/ReentrantReadWriteLock.html)
100
109
 
101
110
  ### Edge Features
102
111
 
@@ -108,34 +117,31 @@ be obeyed though. Features developed in `concurrent-ruby-edge` are expected to m
108
117
 
109
118
  * [Actor](http://ruby-concurrency.github.io/concurrent-ruby/Concurrent/Actor.html):
110
119
  Implements the Actor Model, where concurrent actors exchange messages.
111
- * [new Future Framework](http://ruby-concurrency.github.io/concurrent-ruby/Concurrent/Edge.html) - new
120
+ * [new Future Framework](http://ruby-concurrency.github.io/concurrent-ruby/Concurrent/Edge/FutureShortcuts.html) - new
112
121
  unified implementation of Futures and Promises which combines Features of previous `Future`,
113
122
  `Promise`, `IVar`, `Event`, `Probe`, `dataflow`, `Delay`, `TimerTask` into single framework. It uses extensively
114
- new synchronization layer to make all the paths **lock-free** with exception of blocking threads on `#wait`.
115
- It offers better performance and does not block threads when not required.
123
+ new synchronization layer to make all the features **non-blocking** and **lock-free** with exception of obviously blocking
124
+ operations like `#wait`, `#value`. It also offers better performance.
116
125
  * [Agent](http://ruby-concurrency.github.io/concurrent-ruby/Concurrent/Agent.html): A single atomic value that represents an identity.
117
126
  * [Channel](http://ruby-concurrency.github.io/concurrent-ruby/Concurrent/Channel.html):
118
127
  Communicating Sequential Processes (CSP).
119
128
  * [Exchanger](http://ruby-concurrency.github.io/concurrent-ruby/Concurrent/Exchanger.html)
120
129
  * [LazyRegister](http://ruby-concurrency.github.io/concurrent-ruby/Concurrent/LazyRegister.html)
121
- * [New Future Promise Framework](http://ruby-concurrency.github.io/concurrent-ruby/Concurrent/Edge.html) - new
122
- unified implementation of Futures and Promises which combines Features of previous `Future`,
123
- `Promise`, `IVar`, `Probe`, `dataflow`, `Delay`, `TimerTask` into single framework. It uses extensively
124
- new synchronization layer to make all the paths lock-free with exception of blocking threads on `#wait`.
125
- It offers better performance and does not block threads (exception being `#wait` and similar methods where it's
126
- intended).
127
-
130
+ * [Atomic Markable Reference](http://ruby-concurrency.github.io/concurrent-ruby/Concurrent/Edge/AtomicMarkableReference.html)
131
+ * [LockFreeLinked Set](http://ruby-concurrency.github.io/concurrent-ruby/Concurrent/Edge/LockFreeLinkedSet.html)
132
+ * [LockFreeStack](http://ruby-concurrency.github.io/concurrent-ruby/Concurrent/Edge/LockFreeStack.html)
128
133
 
129
134
  #### Statuses:
130
135
 
131
136
  *Why are these not in core?*
132
137
 
133
- - **Actor** - Partial documentation and tests; stability is good.
138
+ - **Actor** - Partial documentation and tests; stability is good.
134
139
  - **Future/Promise Framework** - API changes; partial documentation and tests; stability good.
135
140
  - **Agent** - Incomplete behaviour compared to Clojure's models; stability good.
136
141
  - **Channel** - Missing documentation; limted features; stability good.
137
142
  - **Exchanger** - Known race condition requiring a new implementation.
138
- - **LazyRegister** - Missing documentation and tests.
143
+ - **LazyRegister** - Missing documentation and tests.
144
+ - **AtomicMarkableReference, LockFreeLinkedSet, LockFreeStack** - Needs real world battle testing
139
145
 
140
146
  ## Usage
141
147
 
@@ -179,8 +185,6 @@ require 'concurrent/actor' # Concurrent::Actor and supporting code
179
185
  require 'concurrent/edge/future' # new Future Framework
180
186
  require 'concurrent/agent' # Concurrent::Agent
181
187
  require 'concurrent/channel ' # Concurrent::Channel and supporting code
182
- require 'concurrent/exchanger' # Concurrent::Exchanger
183
- require 'concurrent/lazy_register' # Concurrent::LazyRegister
184
188
  ```
185
189
 
186
190
  If the library does not behave as expected, `Concurrent.use_stdlib_logger(Logger::DEBUG)` could help to reveal the problem.
@@ -208,7 +208,7 @@ module Concurrent
208
208
  end
209
209
 
210
210
  def initialize_behaviours(opts)
211
- @behaviour_definition = (Type! opts[:behaviour_definition] || @context.behaviour_definition, Array).each do |(behaviour, *args)|
211
+ @behaviour_definition = (Type! opts[:behaviour_definition] || @context.behaviour_definition, Array).each do |(behaviour, _)|
212
212
  Child! behaviour, Behaviour::Abstract
213
213
  end
214
214
  @behaviours = {}
@@ -37,7 +37,7 @@ module Concurrent
37
37
  end
38
38
 
39
39
  def on_message(message)
40
- command, *rest = message
40
+ command, _ = message
41
41
  return if [:restarted, :reset, :resumed, :terminated].include? command # ignore events from supervised actors
42
42
 
43
43
  envelope_to_redirect = if envelope.future
@@ -113,7 +113,7 @@ module Concurrent
113
113
  # post job on executor
114
114
  # @return [true, false]
115
115
  def post_on(executor, *args, &job)
116
- Concurrent.executor(executor).post *args, &job
116
+ Concurrent.executor(executor).post(*args, &job)
117
117
  end
118
118
 
119
119
  # TODO add first(futures, count=count)
@@ -307,7 +307,7 @@ module Concurrent
307
307
  # @!visibility private
308
308
  def complete_with(state, raise_on_reassign = true)
309
309
  if @State.compare_and_set(PENDING, state)
310
- (state)
310
+ #(state)
311
311
  # go to synchronized block only if there were waiting threads
312
312
  synchronize { ns_broadcast } if @Waiters.clear
313
313
  call_callbacks
@@ -323,7 +323,7 @@ module Concurrent
323
323
  # @return [Array<AbstractPromise>]
324
324
  def blocks
325
325
  @Callbacks.each_with_object([]) do |callback, promises|
326
- promises.push *callback.select { |v| v.is_a? AbstractPromise }
326
+ promises.push(*(callback.select { |v| v.is_a? AbstractPromise }))
327
327
  end
328
328
  end
329
329
 
@@ -464,7 +464,7 @@ module Concurrent
464
464
  # @!visibility private
465
465
  class SuccessArray < Success
466
466
  def apply(block)
467
- block.call *value
467
+ block.call(*value)
468
468
  end
469
469
  end
470
470
 
@@ -520,7 +520,7 @@ module Concurrent
520
520
  end
521
521
 
522
522
  def apply(block)
523
- block.call *reason
523
+ block.call(*reason)
524
524
  end
525
525
  end
526
526
 
@@ -603,7 +603,7 @@ module Concurrent
603
603
  raise 'obligation is not failed' unless failed?
604
604
  reason = @State.get.reason
605
605
  if reason.is_a?(Array)
606
- reason.each { |e| log Error, 'Edge::Future', e }
606
+ reason.each { |e| log ERROR, 'Edge::Future', e }
607
607
  Concurrent::Error.new 'multiple exceptions, inspect log'
608
608
  else
609
609
  reason.exception(*args)
@@ -776,14 +776,14 @@ module Concurrent
776
776
  end
777
777
 
778
778
  def pr_async_callback_on_success(state, executor, callback)
779
- pr_with_async(executor, state, callback) do |state, callback|
780
- pr_callback_on_success state, callback
779
+ pr_with_async(executor, state, callback) do |st, cb|
780
+ pr_callback_on_success st, cb
781
781
  end
782
782
  end
783
783
 
784
784
  def pr_async_callback_on_failure(state, executor, callback)
785
- pr_with_async(executor, state, callback) do |state, callback|
786
- pr_callback_on_failure state, callback
785
+ pr_with_async(executor, state, callback) do |st, cb|
786
+ pr_callback_on_failure st, cb
787
787
  end
788
788
  end
789
789
 
@@ -804,8 +804,8 @@ module Concurrent
804
804
  end
805
805
 
806
806
  def pr_async_callback_on_completion(state, executor, callback)
807
- pr_with_async(executor, state, callback) do |state, callback|
808
- pr_callback_on_completion state, callback
807
+ pr_with_async(executor, state, callback) do |st, cb|
808
+ pr_callback_on_completion st, cb
809
809
  end
810
810
  end
811
811
 
@@ -981,7 +981,7 @@ module Concurrent
981
981
  @Countdown = AtomicFixnum.new countdown
982
982
 
983
983
  super(future)
984
- @BlockedBy.each { |future| future.add_callback :pr_callback_notify_blocked, self }
984
+ @BlockedBy.each { |f| f.add_callback :pr_callback_notify_blocked, self }
985
985
  end
986
986
 
987
987
  # @api private
@@ -1063,8 +1063,8 @@ module Concurrent
1063
1063
 
1064
1064
  def on_completable(done_future)
1065
1065
  if done_future.success?
1066
- Concurrent.post_on(@Executor, done_future, @Task) do |done_future, task|
1067
- evaluate_to lambda { done_future.apply task }
1066
+ Concurrent.post_on(@Executor, done_future, @Task) do |future, task|
1067
+ evaluate_to lambda { future.apply task }
1068
1068
  end
1069
1069
  else
1070
1070
  complete_with done_future.internal_state
@@ -1082,8 +1082,8 @@ module Concurrent
1082
1082
 
1083
1083
  def on_completable(done_future)
1084
1084
  if done_future.failed?
1085
- Concurrent.post_on(@Executor, done_future, @Task) do |done_future, task|
1086
- evaluate_to lambda { done_future.apply task }
1085
+ Concurrent.post_on(@Executor, done_future, @Task) do |future, task|
1086
+ evaluate_to lambda { future.apply task }
1087
1087
  end
1088
1088
  else
1089
1089
  complete_with done_future.internal_state
@@ -1097,7 +1097,7 @@ module Concurrent
1097
1097
 
1098
1098
  def on_completable(done_future)
1099
1099
  if Future === done_future
1100
- Concurrent.post_on(@Executor, done_future, @Task) { |future, task| evaluate_to *future.result, task }
1100
+ Concurrent.post_on(@Executor, done_future, @Task) { |future, task| evaluate_to(*future.result, task) }
1101
1101
  else
1102
1102
  Concurrent.post_on(@Executor, @Task) { |task| evaluate_to task }
1103
1103
  end
@@ -123,8 +123,8 @@ module Concurrent
123
123
  #
124
124
  # An iterator to loop through the set.
125
125
  #
126
- # @param [Object] item the item you to remove from the set
127
- # @yeild [Object] each item in the set
126
+ # @yield [Object] each item in the set
127
+ # @yieldparam [Object] item the item you to remove from the set
128
128
  #
129
129
  # @return [Object] self: the linked set on which each was called
130
130
  def each
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: concurrent-ruby-edge
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jerry D'Antonio
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2015-07-10 00:00:00.000000000 Z
13
+ date: 2015-08-09 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: concurrent-ruby
@@ -18,14 +18,14 @@ dependencies:
18
18
  requirements:
19
19
  - - "~>"
20
20
  - !ruby/object:Gem::Version
21
- version: 0.9.0
21
+ version: 0.9.1
22
22
  type: :runtime
23
23
  prerelease: false
24
24
  version_requirements: !ruby/object:Gem::Requirement
25
25
  requirements:
26
26
  - - "~>"
27
27
  - !ruby/object:Gem::Version
28
- version: 0.9.0
28
+ version: 0.9.1
29
29
  description: |
30
30
  These features are under active development and may change frequently. They are expected not to
31
31
  keep backward compatibility (there may also lack tests and documentation). Semantic versions will