concurrent-ruby 0.8.0.pre2-java → 0.9.0-java

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (145) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +114 -3
  3. data/README.md +111 -55
  4. data/lib/concurrent.rb +90 -14
  5. data/lib/concurrent/async.rb +143 -51
  6. data/lib/concurrent/atom.rb +131 -0
  7. data/lib/concurrent/atomic/atomic_boolean.rb +57 -107
  8. data/lib/concurrent/atomic/atomic_fixnum.rb +73 -101
  9. data/lib/concurrent/atomic/atomic_reference.rb +49 -0
  10. data/lib/concurrent/atomic/condition.rb +23 -12
  11. data/lib/concurrent/atomic/count_down_latch.rb +23 -21
  12. data/lib/concurrent/atomic/cyclic_barrier.rb +47 -47
  13. data/lib/concurrent/atomic/event.rb +33 -42
  14. data/lib/concurrent/atomic/read_write_lock.rb +252 -0
  15. data/lib/concurrent/atomic/semaphore.rb +64 -89
  16. data/lib/concurrent/atomic/thread_local_var.rb +130 -58
  17. data/lib/concurrent/atomic/thread_local_var/weak_key_map.rb +236 -0
  18. data/lib/concurrent/atomic_reference/direct_update.rb +34 -3
  19. data/lib/concurrent/atomic_reference/jruby.rb +6 -3
  20. data/lib/concurrent/atomic_reference/mutex_atomic.rb +17 -39
  21. data/lib/concurrent/atomic_reference/numeric_cas_wrapper.rb +3 -0
  22. data/lib/concurrent/atomic_reference/rbx.rb +4 -1
  23. data/lib/concurrent/atomic_reference/ruby.rb +6 -3
  24. data/lib/concurrent/atomics.rb +74 -4
  25. data/lib/concurrent/collection/copy_on_notify_observer_set.rb +115 -0
  26. data/lib/concurrent/collection/copy_on_write_observer_set.rb +119 -0
  27. data/lib/concurrent/collection/priority_queue.rb +300 -245
  28. data/lib/concurrent/concern/deprecation.rb +34 -0
  29. data/lib/concurrent/concern/dereferenceable.rb +88 -0
  30. data/lib/concurrent/concern/logging.rb +27 -0
  31. data/lib/concurrent/concern/obligation.rb +228 -0
  32. data/lib/concurrent/concern/observable.rb +85 -0
  33. data/lib/concurrent/configuration.rb +234 -109
  34. data/lib/concurrent/dataflow.rb +2 -3
  35. data/lib/concurrent/delay.rb +141 -50
  36. data/lib/concurrent/edge.rb +30 -0
  37. data/lib/concurrent/errors.rb +19 -7
  38. data/lib/concurrent/exchanger.rb +25 -1
  39. data/lib/concurrent/executor/cached_thread_pool.rb +51 -33
  40. data/lib/concurrent/executor/executor.rb +46 -299
  41. data/lib/concurrent/executor/executor_service.rb +521 -0
  42. data/lib/concurrent/executor/fixed_thread_pool.rb +196 -23
  43. data/lib/concurrent/executor/immediate_executor.rb +9 -9
  44. data/lib/concurrent/executor/indirect_immediate_executor.rb +4 -3
  45. data/lib/concurrent/executor/java_single_thread_executor.rb +17 -16
  46. data/lib/concurrent/executor/java_thread_pool_executor.rb +55 -102
  47. data/lib/concurrent/executor/ruby_single_thread_executor.rb +14 -16
  48. data/lib/concurrent/executor/ruby_thread_pool_executor.rb +250 -166
  49. data/lib/concurrent/executor/safe_task_executor.rb +5 -4
  50. data/lib/concurrent/executor/serialized_execution.rb +22 -18
  51. data/lib/concurrent/executor/{per_thread_executor.rb → simple_executor_service.rb} +29 -20
  52. data/lib/concurrent/executor/single_thread_executor.rb +32 -21
  53. data/lib/concurrent/executor/thread_pool_executor.rb +73 -60
  54. data/lib/concurrent/executor/timer_set.rb +96 -84
  55. data/lib/concurrent/executors.rb +1 -1
  56. data/lib/concurrent/future.rb +71 -38
  57. data/lib/concurrent/immutable_struct.rb +89 -0
  58. data/lib/concurrent/ivar.rb +152 -60
  59. data/lib/concurrent/lazy_register.rb +40 -20
  60. data/lib/concurrent/maybe.rb +226 -0
  61. data/lib/concurrent/mutable_struct.rb +227 -0
  62. data/lib/concurrent/mvar.rb +44 -43
  63. data/lib/concurrent/promise.rb +229 -136
  64. data/lib/concurrent/scheduled_task.rb +341 -43
  65. data/lib/concurrent/settable_struct.rb +127 -0
  66. data/lib/concurrent/synchronization.rb +17 -0
  67. data/lib/concurrent/synchronization/abstract_object.rb +163 -0
  68. data/lib/concurrent/synchronization/abstract_struct.rb +158 -0
  69. data/lib/concurrent/synchronization/condition.rb +53 -0
  70. data/lib/concurrent/synchronization/java_object.rb +34 -0
  71. data/lib/concurrent/synchronization/lock.rb +32 -0
  72. data/lib/concurrent/synchronization/monitor_object.rb +26 -0
  73. data/lib/concurrent/synchronization/mutex_object.rb +43 -0
  74. data/lib/concurrent/synchronization/object.rb +78 -0
  75. data/lib/concurrent/synchronization/rbx_object.rb +75 -0
  76. data/lib/concurrent/timer_task.rb +92 -103
  77. data/lib/concurrent/tvar.rb +42 -38
  78. data/lib/concurrent/utilities.rb +3 -1
  79. data/lib/concurrent/utility/at_exit.rb +97 -0
  80. data/lib/concurrent/utility/engine.rb +44 -0
  81. data/lib/concurrent/utility/monotonic_time.rb +59 -0
  82. data/lib/concurrent/utility/native_extension_loader.rb +56 -0
  83. data/lib/concurrent/utility/processor_counter.rb +156 -0
  84. data/lib/concurrent/utility/timeout.rb +18 -14
  85. data/lib/concurrent/utility/timer.rb +11 -6
  86. data/lib/concurrent/version.rb +2 -1
  87. data/lib/concurrent_ruby.rb +1 -0
  88. data/lib/concurrent_ruby_ext.jar +0 -0
  89. metadata +46 -66
  90. data/lib/concurrent/actor.rb +0 -103
  91. data/lib/concurrent/actor/behaviour.rb +0 -70
  92. data/lib/concurrent/actor/behaviour/abstract.rb +0 -48
  93. data/lib/concurrent/actor/behaviour/awaits.rb +0 -21
  94. data/lib/concurrent/actor/behaviour/buffer.rb +0 -54
  95. data/lib/concurrent/actor/behaviour/errors_on_unknown_message.rb +0 -12
  96. data/lib/concurrent/actor/behaviour/executes_context.rb +0 -18
  97. data/lib/concurrent/actor/behaviour/linking.rb +0 -45
  98. data/lib/concurrent/actor/behaviour/pausing.rb +0 -77
  99. data/lib/concurrent/actor/behaviour/removes_child.rb +0 -16
  100. data/lib/concurrent/actor/behaviour/sets_results.rb +0 -36
  101. data/lib/concurrent/actor/behaviour/supervised.rb +0 -59
  102. data/lib/concurrent/actor/behaviour/supervising.rb +0 -34
  103. data/lib/concurrent/actor/behaviour/terminates_children.rb +0 -13
  104. data/lib/concurrent/actor/behaviour/termination.rb +0 -54
  105. data/lib/concurrent/actor/context.rb +0 -154
  106. data/lib/concurrent/actor/core.rb +0 -217
  107. data/lib/concurrent/actor/default_dead_letter_handler.rb +0 -9
  108. data/lib/concurrent/actor/envelope.rb +0 -41
  109. data/lib/concurrent/actor/errors.rb +0 -27
  110. data/lib/concurrent/actor/internal_delegations.rb +0 -49
  111. data/lib/concurrent/actor/public_delegations.rb +0 -40
  112. data/lib/concurrent/actor/reference.rb +0 -81
  113. data/lib/concurrent/actor/root.rb +0 -37
  114. data/lib/concurrent/actor/type_check.rb +0 -48
  115. data/lib/concurrent/actor/utils.rb +0 -10
  116. data/lib/concurrent/actor/utils/ad_hoc.rb +0 -21
  117. data/lib/concurrent/actor/utils/balancer.rb +0 -42
  118. data/lib/concurrent/actor/utils/broadcast.rb +0 -52
  119. data/lib/concurrent/actor/utils/pool.rb +0 -59
  120. data/lib/concurrent/actress.rb +0 -3
  121. data/lib/concurrent/agent.rb +0 -209
  122. data/lib/concurrent/atomic.rb +0 -92
  123. data/lib/concurrent/atomic/copy_on_notify_observer_set.rb +0 -118
  124. data/lib/concurrent/atomic/copy_on_write_observer_set.rb +0 -117
  125. data/lib/concurrent/atomic/synchronization.rb +0 -51
  126. data/lib/concurrent/channel/buffered_channel.rb +0 -85
  127. data/lib/concurrent/channel/channel.rb +0 -41
  128. data/lib/concurrent/channel/unbuffered_channel.rb +0 -35
  129. data/lib/concurrent/channel/waitable_list.rb +0 -40
  130. data/lib/concurrent/channels.rb +0 -5
  131. data/lib/concurrent/collection/blocking_ring_buffer.rb +0 -71
  132. data/lib/concurrent/collection/ring_buffer.rb +0 -59
  133. data/lib/concurrent/collections.rb +0 -3
  134. data/lib/concurrent/dereferenceable.rb +0 -108
  135. data/lib/concurrent/executor/java_cached_thread_pool.rb +0 -32
  136. data/lib/concurrent/executor/java_fixed_thread_pool.rb +0 -31
  137. data/lib/concurrent/executor/ruby_cached_thread_pool.rb +0 -29
  138. data/lib/concurrent/executor/ruby_fixed_thread_pool.rb +0 -32
  139. data/lib/concurrent/executor/ruby_thread_pool_worker.rb +0 -73
  140. data/lib/concurrent/logging.rb +0 -20
  141. data/lib/concurrent/obligation.rb +0 -171
  142. data/lib/concurrent/observable.rb +0 -73
  143. data/lib/concurrent/options_parser.rb +0 -48
  144. data/lib/concurrent/utility/processor_count.rb +0 -152
  145. data/lib/extension_helper.rb +0 -37
@@ -2,34 +2,38 @@ require 'rbconfig'
2
2
  require 'thread'
3
3
 
4
4
  require 'concurrent/errors'
5
+ require 'concurrent/concern/deprecation'
5
6
 
6
7
  module Concurrent
8
+ extend Concern::Deprecation
7
9
 
8
- # Wait the given number of seconds for the block operation to complete.
10
+ # [DEPRECATED] Wait the given number of seconds for the block operation to complete.
11
+ # Intended to be a simpler and more reliable replacement to the Ruby
12
+ # standard library `Timeout::timeout` method. It does not kill the task
13
+ # so it finishes anyway. Advantage is that it cannot cause any ugly errors by
14
+ # killing threads.
9
15
  #
10
16
  # @param [Integer] seconds The number of seconds to wait
11
- #
12
17
  # @return [Object] The result of the block operation
13
18
  #
14
19
  # @raise [Concurrent::TimeoutError] when the block operation does not complete
15
20
  # in the allotted number of seconds.
16
21
  #
17
- # @note This method is intended to be a simpler and more reliable replacement
18
- # to the Ruby standard library `Timeout::timeout` method.
19
- def timeout(seconds)
20
-
21
- thread = Thread.new do
22
- Thread.current[:result] = yield
23
- end
24
- success = thread.join(seconds)
22
+ # @see http://ruby-doc.org/stdlib-2.2.0/libdoc/timeout/rdoc/Timeout.html Ruby Timeout::timeout
23
+ #
24
+ # @!macro monotonic_clock_warning
25
+ #
26
+ # @deprecated timeout is deprecated and will be removed
27
+ def timeout(seconds, &block)
28
+ deprecated 'timeout is deprecated and will be removed'
25
29
 
26
- if success
27
- return thread[:result]
30
+ future = Future.execute(&block)
31
+ future.wait(seconds)
32
+ if future.complete?
33
+ future.value!
28
34
  else
29
35
  raise TimeoutError
30
36
  end
31
- ensure
32
- Thread.kill(thread) unless thread.nil?
33
37
  end
34
38
  module_function :timeout
35
39
  end
@@ -1,21 +1,26 @@
1
1
  require 'concurrent/configuration'
2
- require 'thread'
2
+ require 'concurrent/concern/deprecation'
3
3
 
4
4
  module Concurrent
5
+ extend Concern::Deprecation
5
6
 
6
- # Perform the given operation asynchronously after the given number of seconds.
7
+ # [DEPRECATED] Perform the given operation asynchronously after
8
+ # the given number of seconds.
7
9
  #
8
10
  # @param [Fixnum] seconds the interval in seconds to wait before executing the task
9
11
  #
10
12
  # @yield the task to execute
11
13
  #
12
- # @return [Boolean] true
14
+ # @return [Concurrent::ScheduledTask] IVar representing the task
15
+ #
16
+ # @see Concurrent::ScheduledTask
17
+ #
18
+ # @deprecated use `ScheduledTask` instead
13
19
  def timer(seconds, *args, &block)
20
+ deprecated_method 'Concurrent.timer', 'ScheduledTask'
14
21
  raise ArgumentError.new('no block given') unless block_given?
15
22
  raise ArgumentError.new('interval must be greater than or equal to zero') if seconds < 0
16
-
17
- Concurrent.configuration.global_timer_set.post(seconds, *args, &block)
18
- true
23
+ Concurrent.global_timer_set.post(seconds, *args, &block)
19
24
  end
20
25
  module_function :timer
21
26
  end
@@ -1,3 +1,4 @@
1
1
  module Concurrent
2
- VERSION = '0.8.0.pre2'
2
+ VERSION = '0.9.0'
3
+ EDGE_VERSION = '0.1.0'
3
4
  end
@@ -1 +1,2 @@
1
+ warn "'[DEPRECATED] use `require 'concurrent'` instead of `require 'concurrent_ruby'`"
1
2
  require 'concurrent'
Binary file
metadata CHANGED
@@ -1,19 +1,22 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: concurrent-ruby
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.8.0.pre2
4
+ version: 0.9.0
5
5
  platform: java
6
6
  authors:
7
7
  - Jerry D'Antonio
8
+ - The Ruby Concurrency Team
8
9
  autorequire:
9
10
  bindir: bin
10
11
  cert_chain: []
11
- date: 2015-01-15 00:00:00.000000000 Z
12
+ date: 2015-07-10 00:00:00.000000000 Z
12
13
  dependencies: []
13
- description: |2
14
- Modern concurrency tools including agents, futures, promises, thread pools, actors, supervisors, and more.
15
- Inspired by Erlang, Clojure, Go, JavaScript, actors, and classic concurrency patterns.
16
- email: jerry.dantonio@gmail.com
14
+ description: |
15
+ Modern concurrency tools including agents, futures, promises, thread pools, actors, supervisors, and more.
16
+ Inspired by Erlang, Clojure, Go, JavaScript, actors, and classic concurrency patterns.
17
+ email:
18
+ - jerry.dantonio@gmail.com
19
+ - concurrent-ruby@googlegroups.com
17
20
  executables: []
18
21
  extensions: []
19
22
  extra_rdoc_files:
@@ -25,51 +28,19 @@ files:
25
28
  - LICENSE.txt
26
29
  - README.md
27
30
  - lib/concurrent.rb
28
- - lib/concurrent/actor.rb
29
- - lib/concurrent/actor/behaviour.rb
30
- - lib/concurrent/actor/behaviour/abstract.rb
31
- - lib/concurrent/actor/behaviour/awaits.rb
32
- - lib/concurrent/actor/behaviour/buffer.rb
33
- - lib/concurrent/actor/behaviour/errors_on_unknown_message.rb
34
- - lib/concurrent/actor/behaviour/executes_context.rb
35
- - lib/concurrent/actor/behaviour/linking.rb
36
- - lib/concurrent/actor/behaviour/pausing.rb
37
- - lib/concurrent/actor/behaviour/removes_child.rb
38
- - lib/concurrent/actor/behaviour/sets_results.rb
39
- - lib/concurrent/actor/behaviour/supervised.rb
40
- - lib/concurrent/actor/behaviour/supervising.rb
41
- - lib/concurrent/actor/behaviour/terminates_children.rb
42
- - lib/concurrent/actor/behaviour/termination.rb
43
- - lib/concurrent/actor/context.rb
44
- - lib/concurrent/actor/core.rb
45
- - lib/concurrent/actor/default_dead_letter_handler.rb
46
- - lib/concurrent/actor/envelope.rb
47
- - lib/concurrent/actor/errors.rb
48
- - lib/concurrent/actor/internal_delegations.rb
49
- - lib/concurrent/actor/public_delegations.rb
50
- - lib/concurrent/actor/reference.rb
51
- - lib/concurrent/actor/root.rb
52
- - lib/concurrent/actor/type_check.rb
53
- - lib/concurrent/actor/utils.rb
54
- - lib/concurrent/actor/utils/ad_hoc.rb
55
- - lib/concurrent/actor/utils/balancer.rb
56
- - lib/concurrent/actor/utils/broadcast.rb
57
- - lib/concurrent/actor/utils/pool.rb
58
- - lib/concurrent/actress.rb
59
- - lib/concurrent/agent.rb
60
31
  - lib/concurrent/async.rb
61
- - lib/concurrent/atomic.rb
32
+ - lib/concurrent/atom.rb
62
33
  - lib/concurrent/atomic/atomic_boolean.rb
63
34
  - lib/concurrent/atomic/atomic_fixnum.rb
35
+ - lib/concurrent/atomic/atomic_reference.rb
64
36
  - lib/concurrent/atomic/condition.rb
65
- - lib/concurrent/atomic/copy_on_notify_observer_set.rb
66
- - lib/concurrent/atomic/copy_on_write_observer_set.rb
67
37
  - lib/concurrent/atomic/count_down_latch.rb
68
38
  - lib/concurrent/atomic/cyclic_barrier.rb
69
39
  - lib/concurrent/atomic/event.rb
40
+ - lib/concurrent/atomic/read_write_lock.rb
70
41
  - lib/concurrent/atomic/semaphore.rb
71
- - lib/concurrent/atomic/synchronization.rb
72
42
  - lib/concurrent/atomic/thread_local_var.rb
43
+ - lib/concurrent/atomic/thread_local_var/weak_key_map.rb
73
44
  - lib/concurrent/atomic_reference/concurrent_update_error.rb
74
45
  - lib/concurrent/atomic_reference/direct_update.rb
75
46
  - lib/concurrent/atomic_reference/jruby.rb
@@ -78,62 +49,70 @@ files:
78
49
  - lib/concurrent/atomic_reference/rbx.rb
79
50
  - lib/concurrent/atomic_reference/ruby.rb
80
51
  - lib/concurrent/atomics.rb
81
- - lib/concurrent/channel/buffered_channel.rb
82
- - lib/concurrent/channel/channel.rb
83
- - lib/concurrent/channel/unbuffered_channel.rb
84
- - lib/concurrent/channel/waitable_list.rb
85
- - lib/concurrent/channels.rb
86
- - lib/concurrent/collection/blocking_ring_buffer.rb
52
+ - lib/concurrent/collection/copy_on_notify_observer_set.rb
53
+ - lib/concurrent/collection/copy_on_write_observer_set.rb
87
54
  - lib/concurrent/collection/priority_queue.rb
88
- - lib/concurrent/collection/ring_buffer.rb
89
- - lib/concurrent/collections.rb
55
+ - lib/concurrent/concern/deprecation.rb
56
+ - lib/concurrent/concern/dereferenceable.rb
57
+ - lib/concurrent/concern/logging.rb
58
+ - lib/concurrent/concern/obligation.rb
59
+ - lib/concurrent/concern/observable.rb
90
60
  - lib/concurrent/configuration.rb
91
61
  - lib/concurrent/dataflow.rb
92
62
  - lib/concurrent/delay.rb
93
- - lib/concurrent/dereferenceable.rb
63
+ - lib/concurrent/edge.rb
94
64
  - lib/concurrent/errors.rb
95
65
  - lib/concurrent/exchanger.rb
96
66
  - lib/concurrent/executor/cached_thread_pool.rb
97
67
  - lib/concurrent/executor/executor.rb
68
+ - lib/concurrent/executor/executor_service.rb
98
69
  - lib/concurrent/executor/fixed_thread_pool.rb
99
70
  - lib/concurrent/executor/immediate_executor.rb
100
71
  - lib/concurrent/executor/indirect_immediate_executor.rb
101
- - lib/concurrent/executor/java_cached_thread_pool.rb
102
- - lib/concurrent/executor/java_fixed_thread_pool.rb
103
72
  - lib/concurrent/executor/java_single_thread_executor.rb
104
73
  - lib/concurrent/executor/java_thread_pool_executor.rb
105
- - lib/concurrent/executor/per_thread_executor.rb
106
- - lib/concurrent/executor/ruby_cached_thread_pool.rb
107
- - lib/concurrent/executor/ruby_fixed_thread_pool.rb
108
74
  - lib/concurrent/executor/ruby_single_thread_executor.rb
109
75
  - lib/concurrent/executor/ruby_thread_pool_executor.rb
110
- - lib/concurrent/executor/ruby_thread_pool_worker.rb
111
76
  - lib/concurrent/executor/safe_task_executor.rb
112
77
  - lib/concurrent/executor/serialized_execution.rb
78
+ - lib/concurrent/executor/simple_executor_service.rb
113
79
  - lib/concurrent/executor/single_thread_executor.rb
114
80
  - lib/concurrent/executor/thread_pool_executor.rb
115
81
  - lib/concurrent/executor/timer_set.rb
116
82
  - lib/concurrent/executors.rb
117
83
  - lib/concurrent/future.rb
84
+ - lib/concurrent/immutable_struct.rb
118
85
  - lib/concurrent/ivar.rb
119
86
  - lib/concurrent/lazy_register.rb
120
- - lib/concurrent/logging.rb
87
+ - lib/concurrent/maybe.rb
88
+ - lib/concurrent/mutable_struct.rb
121
89
  - lib/concurrent/mvar.rb
122
- - lib/concurrent/obligation.rb
123
- - lib/concurrent/observable.rb
124
- - lib/concurrent/options_parser.rb
125
90
  - lib/concurrent/promise.rb
126
91
  - lib/concurrent/scheduled_task.rb
92
+ - lib/concurrent/settable_struct.rb
93
+ - lib/concurrent/synchronization.rb
94
+ - lib/concurrent/synchronization/abstract_object.rb
95
+ - lib/concurrent/synchronization/abstract_struct.rb
96
+ - lib/concurrent/synchronization/condition.rb
97
+ - lib/concurrent/synchronization/java_object.rb
98
+ - lib/concurrent/synchronization/lock.rb
99
+ - lib/concurrent/synchronization/monitor_object.rb
100
+ - lib/concurrent/synchronization/mutex_object.rb
101
+ - lib/concurrent/synchronization/object.rb
102
+ - lib/concurrent/synchronization/rbx_object.rb
127
103
  - lib/concurrent/timer_task.rb
128
104
  - lib/concurrent/tvar.rb
129
105
  - lib/concurrent/utilities.rb
130
- - lib/concurrent/utility/processor_count.rb
106
+ - lib/concurrent/utility/at_exit.rb
107
+ - lib/concurrent/utility/engine.rb
108
+ - lib/concurrent/utility/monotonic_time.rb
109
+ - lib/concurrent/utility/native_extension_loader.rb
110
+ - lib/concurrent/utility/processor_counter.rb
131
111
  - lib/concurrent/utility/timeout.rb
132
112
  - lib/concurrent/utility/timer.rb
133
113
  - lib/concurrent/version.rb
134
114
  - lib/concurrent_ruby.rb
135
115
  - lib/concurrent_ruby_ext.jar
136
- - lib/extension_helper.rb
137
116
  homepage: http://www.concurrent-ruby.com
138
117
  licenses:
139
118
  - MIT
@@ -144,14 +123,14 @@ require_paths:
144
123
  - lib
145
124
  required_ruby_version: !ruby/object:Gem::Requirement
146
125
  requirements:
147
- - - ">="
126
+ - - '>='
148
127
  - !ruby/object:Gem::Version
149
128
  version: 1.9.3
150
129
  required_rubygems_version: !ruby/object:Gem::Requirement
151
130
  requirements:
152
- - - ">"
131
+ - - '>='
153
132
  - !ruby/object:Gem::Version
154
- version: 1.3.1
133
+ version: '0'
155
134
  requirements: []
156
135
  rubyforge_project:
157
136
  rubygems_version: 2.4.5
@@ -159,3 +138,4 @@ signing_key:
159
138
  specification_version: 4
160
139
  summary: Modern concurrency tools for Ruby. Inspired by Erlang, Clojure, Scala, Haskell, F#, C#, Java, and classic concurrency patterns.
161
140
  test_files: []
141
+ has_rdoc:
@@ -1,103 +0,0 @@
1
- require 'concurrent/configuration'
2
- require 'concurrent/executor/serialized_execution'
3
- require 'concurrent/ivar'
4
- require 'concurrent/logging'
5
- require 'concurrent/atomic/synchronization'
6
-
7
- module Concurrent
8
- # TODO https://github.com/celluloid/celluloid/wiki/Supervision-Groups ?
9
- # TODO Remote actors using DRb
10
- # TODO IO interoperation
11
- # TODO un/become
12
-
13
- # TODO doc
14
- # - what happens if I try to supervise using a normal Context?
15
- # - how to change behaviours
16
- # - how to implement custom restarting?
17
- # - pool for io operations using different executor
18
- # - document guaranteed ordering
19
-
20
- # {include:file:doc/actor/main.md}
21
- module Actor
22
-
23
- require 'concurrent/actor/type_check'
24
- require 'concurrent/actor/errors'
25
- require 'concurrent/actor/public_delegations'
26
- require 'concurrent/actor/internal_delegations'
27
- require 'concurrent/actor/envelope'
28
- require 'concurrent/actor/reference'
29
- require 'concurrent/actor/core'
30
- require 'concurrent/actor/behaviour'
31
- require 'concurrent/actor/context'
32
-
33
- require 'concurrent/actor/default_dead_letter_handler'
34
- require 'concurrent/actor/root'
35
- require 'concurrent/actor/utils'
36
-
37
- # @return [Reference, nil] current executing actor if any
38
- def self.current
39
- Thread.current[:__current_actor__]
40
- end
41
-
42
- @root = Delay.new do
43
- Core.new(parent: nil, name: '/', class: Root, initialized: ivar = IVar.new).reference.tap do
44
- ivar.no_error!
45
- end
46
- end
47
-
48
- # A root actor, a default parent of all actors spawned outside an actor
49
- def self.root
50
- @root.value!
51
- end
52
-
53
- # Spawns a new actor.
54
- #
55
- # @example simple
56
- # Actor.spawn(AdHoc, :ping1) { -> message { message } }
57
- #
58
- # @example complex
59
- # Actor.spawn name: :ping3,
60
- # class: AdHoc,
61
- # args: [1]
62
- # executor: Concurrent.configuration.global_task_pool do |add|
63
- # lambda { |number| number + add }
64
- # end
65
- #
66
- # @param block for context_class instantiation
67
- # @param args see {.spawn_optionify}
68
- # @return [Reference] never the actual actor
69
- def self.spawn(*args, &block)
70
- if Actor.current
71
- Core.new(spawn_optionify(*args).merge(parent: Actor.current), &block).reference
72
- else
73
- root.ask([:spawn, spawn_optionify(*args), block]).value!
74
- end
75
- end
76
-
77
- # as {.spawn} but it'll raise when Actor not initialized properly
78
- def self.spawn!(*args, &block)
79
- spawn(spawn_optionify(*args).merge(initialized: ivar = IVar.new), &block).tap { ivar.no_error! }
80
- end
81
-
82
- # @overload spawn_optionify(context_class, name, *args)
83
- # @param [AbstractContext] context_class to be spawned
84
- # @param [String, Symbol] name of the instance, it's used to generate the {Core#path} of the actor
85
- # @param args for context_class instantiation
86
- # @overload spawn_optionify(opts)
87
- # see {Core#initialize} opts
88
- def self.spawn_optionify(*args)
89
- if args.size == 1 && args.first.is_a?(Hash)
90
- args.first
91
- else
92
- { class: args[0],
93
- name: args[1],
94
- args: args[2..-1] }
95
- end
96
- end
97
-
98
- # call this to disable experimental warning
99
- def self.i_know_it_is_experimental!
100
- warn 'Method Actor.i_know_it_is_experimental! is deprecated. The Actors are no longer experimental.'
101
- end
102
- end
103
- end
@@ -1,70 +0,0 @@
1
- module Concurrent
2
- module Actor
3
-
4
- # Actors have modular architecture, which is achieved by combining a light core with chain of
5
- # behaviours. Each message or internal event propagates through the chain allowing the
6
- # behaviours react based on their responsibility. listing few as an example:
7
- #
8
- # - {Behaviour::Linking}:
9
- #
10
- # > {include:Actor::Behaviour::Linking}
11
- #
12
- # - {Behaviour::Awaits}:
13
- #
14
- # > {include:Actor::Behaviour::Awaits}
15
- #
16
- # See {Behaviour}'s namespace fo other behaviours.
17
- # If needed new behaviours can be added, or old one removed to get required behaviour.
18
- module Behaviour
19
- MESSAGE_PROCESSED = Object.new
20
-
21
- require 'concurrent/actor/behaviour/abstract'
22
- require 'concurrent/actor/behaviour/awaits'
23
- require 'concurrent/actor/behaviour/buffer'
24
- require 'concurrent/actor/behaviour/errors_on_unknown_message'
25
- require 'concurrent/actor/behaviour/executes_context'
26
- require 'concurrent/actor/behaviour/linking'
27
- require 'concurrent/actor/behaviour/pausing'
28
- require 'concurrent/actor/behaviour/removes_child'
29
- require 'concurrent/actor/behaviour/sets_results'
30
- require 'concurrent/actor/behaviour/supervised'
31
- require 'concurrent/actor/behaviour/supervising'
32
- require 'concurrent/actor/behaviour/termination'
33
- require 'concurrent/actor/behaviour/terminates_children'
34
-
35
- def self.basic_behaviour_definition
36
- [*base,
37
- *user_messages(:terminate!)]
38
- end
39
-
40
- def self.restarting_behaviour_definition
41
- [*base,
42
- *supervised,
43
- [Behaviour::Supervising, [:reset!, :one_for_one]],
44
- *user_messages(:pause!)]
45
- end
46
-
47
- def self.base
48
- [[SetResults, [:terminate!]],
49
- # has to be before Termination to be able to remove children form terminated actor
50
- [RemovesChild, []],
51
- [Termination, []],
52
- [TerminatesChildren, []],
53
- [Linking, []]]
54
- end
55
-
56
- def self.supervised
57
- [[Supervised, []],
58
- [Pausing, []]]
59
- end
60
-
61
- def self.user_messages(on_error)
62
- [[Buffer, []],
63
- [SetResults, [on_error]],
64
- [Awaits, []],
65
- [ExecutesContext, []],
66
- [ErrorsOnUnknownMessage, []]]
67
- end
68
- end
69
- end
70
- end