farce 0.2.0-x86_64-linux-gnu → 0.4.0-x86_64-linux-gnu

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 (68) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +91 -0
  3. data/README.md +117 -1451
  4. data/docs/compatibility.md +74 -0
  5. data/docs/concurrency.md +151 -0
  6. data/docs/data-structures.md +313 -0
  7. data/docs/installation.md +63 -0
  8. data/docs/integrations.md +124 -0
  9. data/docs/introduction.md +266 -0
  10. data/docs/modes.md +8 -5
  11. data/docs/scheduling.md +176 -0
  12. data/docs/scopes.md +3 -1
  13. data/docs/sharing.md +211 -0
  14. data/docs/shims.md +144 -0
  15. data/docs/utilities.md +93 -0
  16. data/docs/variants-and-scopes.md +92 -0
  17. data/docs/variants.md +18 -0
  18. data/lib/farce/abstract/executor.rb +130 -0
  19. data/lib/farce/abstract/flag.rb +6 -0
  20. data/lib/farce/abstract/pool.rb +334 -0
  21. data/lib/farce/abstract/scheduler.rb +539 -93
  22. data/lib/farce/backports.rb +274 -0
  23. data/lib/farce/engine/jruby/fiber_scheduler.rb +3 -0
  24. data/lib/farce/engine/jruby/scheduler_synchronization.rb +87 -0
  25. data/lib/farce/engine/jruby/signal.rb +7 -4
  26. data/lib/farce/engine/ruby/3.4/null_port.rb +21 -0
  27. data/lib/farce/engine/ruby/3.4/patch.rb +67 -0
  28. data/lib/farce/engine/ruby/3.4/port.rb +13 -12
  29. data/lib/farce/engine/ruby/3.4/ractor_methods.rb +0 -1
  30. data/lib/farce/engine/ruby/4.0/null_port.rb +36 -0
  31. data/lib/farce/engine/ruby/4.0/port.rb +1 -2
  32. data/lib/farce/engine/ruby/4.1/null_port.rb +5 -0
  33. data/lib/farce/engine/ruby.rb +7 -0
  34. data/lib/farce/engine/shared/main_scheduler.rb +2 -2
  35. data/lib/farce/engine/shared/null_port.rb +18 -0
  36. data/lib/farce/engine/shared/parallel_scheduler.rb +1 -1
  37. data/lib/farce/engine/shared/port.rb +41 -3
  38. data/lib/farce/engine/shared/proxy_owner.rb +1 -1
  39. data/lib/farce/engine/shared/queue.rb +4 -4
  40. data/lib/farce/engine/shared/ractor_methods.rb +2 -2
  41. data/lib/farce/engine/shared/ractor_selector.rb +73 -0
  42. data/lib/farce/engine/shared/unshared_atom.rb +9 -8
  43. data/lib/farce/engine/shared.rb +9 -0
  44. data/lib/farce/extension.rb +150 -0
  45. data/lib/farce/integrations/ractor_tmvar.rb +4 -1
  46. data/lib/farce/internal/fake_ractor.rb +10 -2
  47. data/lib/farce/internal/lease_initialization.rb +1 -1
  48. data/lib/farce/internal/local_executor_methods.rb +33 -0
  49. data/lib/farce/internal/local_scheduled_task.rb +27 -0
  50. data/lib/farce/internal/scheduled_task.rb +1 -1
  51. data/lib/farce/internal/scheduler_lifecycle.rb +7 -4
  52. data/lib/farce/internal/thread_pool_supervisor.rb +45 -0
  53. data/lib/farce/internal/unshared_pool_worker.rb +14 -0
  54. data/lib/farce/internal.rb +14 -0
  55. data/lib/farce/local/pool.rb +111 -0
  56. data/lib/farce/local/scheduler.rb +219 -0
  57. data/lib/farce/null_port.rb +12 -0
  58. data/lib/farce/pool.rb +2 -290
  59. data/lib/farce/proxy.rb +2 -2
  60. data/lib/farce/scheduler.rb +1 -502
  61. data/lib/farce/system.rb +10 -2
  62. data/lib/farce/task.rb +285 -0
  63. data/lib/farce/{thread_scheduler.rb → thread_executor.rb} +7 -7
  64. data/lib/farce/unshared/pool.rb +44 -0
  65. data/lib/farce/unshared/scheduler.rb +89 -0
  66. data/lib/farce/version.rb +1 -1
  67. data/lib/farce.rb +10 -18
  68. metadata +34 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 95a80efa39413410cb58c9838346a6b0f22f3f2257e2343ba9e200a0c70bd888
4
- data.tar.gz: f813bef3e5b5e4d8fbdeee9651810a3695924c33cbae33d00a21751691ba47d1
3
+ metadata.gz: 25af3aeb5510f2a334aa0774b2786be7ceaa56556a1b796b7182d011ac0568c1
4
+ data.tar.gz: 1a6990110f28469088b087bff007fb3cef4524cd48ab475c1493122abead87b1
5
5
  SHA512:
6
- metadata.gz: 1d6bb887f88615c3ca8ec63343900f3f0ff3d0056f51f722c91f3739170e8c7a91f890466646eb7b539e661d68299d1ad42c3175ffd777faf05fc542d6b23f35
7
- data.tar.gz: 95b72aabc1e151d71c9a6aea389fb639cdf8d90ed3f87507cd433596d8a8482962c6c84e09032b53ab4e0311f9346a9e7a69407e8ba19435e1851e92dcabfc28
6
+ metadata.gz: d526a15f67b128c664afe5f53e553fb1c2bef266296f36f7b5d692e5b21f937ed66b94994cb9ef7148b6d51b08c4f4324a42c8c22f96669c416db8a09dabc279
7
+ data.tar.gz: 45bed6e2ad45e7f35da5f4d963ec24e6c3403ce37db2e011c83df2a44fd254c105a362b4cd2394e7ef833d1290de959a0b2ace63abbbc15373fdc4f7537f86de
data/CHANGELOG.md CHANGED
@@ -4,6 +4,97 @@ Farce follows [Semantic Versioning 2.0](http://semver.org/). Any public method o
4
4
 
5
5
  ## Development Releases
6
6
 
7
+ ### Farce 0.4.0 (2026-10-16)
8
+
9
+ #### New Features
10
+
11
+ ##### Ractor Backports
12
+
13
+ `Farce::Backports` makes newer Ractor APIs available on older Ruby versions:
14
+
15
+ * Added `Ractor#default_port`, `#join`, `#monitor`, `#unmonitor`, and `#value` on Ruby versions prior to 4.0.
16
+ * Added `Ractor#alive?` on Ruby versions prior to 4.1.
17
+ * Added optional `timeout:` support for `Ractor.select`, `Ractor#receive`, and `Ractor::Port#receive` on Ruby versions prior to 4.1.
18
+
19
+ You can activate the backports for a lexical scope with `using Farce::Backports`, install them globally with `Farce::Backports.install`, or call methods on `Farce::Backports` directly.
20
+ Global installation also defines `Ractor` and `Ractor::Port` when they are not natively available.
21
+
22
+ ```ruby
23
+ using Farce::Backports
24
+
25
+ ractor = Farce::Ractor.new { 42 }
26
+ ractor.join
27
+ ractor.value # => 42
28
+ ```
29
+
30
+ ##### Ractor Improvements
31
+
32
+ * `Farce::Ractor.select` is now implemented on JRuby and TruffleRuby. It supports selecting from Ractors and ports, optional timeouts, and waiting without blocking a Fiber scheduler.
33
+ * The Ractor polyfill now supports `alive?` and follows Ruby 4.1's `monitor` notification format when running on Ruby 4.1 or later.
34
+
35
+ ##### Miscellaneous
36
+
37
+ * Added `set?` and `unset?` predicates to `Flag` and `Local::Flag`.
38
+ * Added `Farce::NULL_PORT`, a write-only port that discards messages and can be used to ignore Ractor exit notifications.
39
+ * Added `Farce::System.ruby_version`, which returns the current Ruby release as a version object without prerelease suffixes. It can be called from any Ractor.
40
+ * Added `Farce::Extension` to easily define modules that can be used both as refinements or installed globally into existing classes, used by `Farce::Backports`.
41
+
42
+ #### Bug Fixes
43
+
44
+ * Work around a JRuby synchronization race that could lose a mutex wakeup and leave a scheduled Fiber blocked.
45
+
46
+ #### Other changes
47
+
48
+ * Reorganized the README into a shorter introduction with topic-specific guides in the docs directory.
49
+ * Updated compatibility documentation and tests for `ractor-tmvar` 0.4.0.
50
+
51
+ ### Farce 0.3.0 (2026-10-13)
52
+
53
+ #### New Features
54
+
55
+ ##### Breaking Changes
56
+
57
+ * `Abstract::Scheduler` is no longer a superclass of `Pool`. Use `Abstract::Executor` instead.
58
+
59
+ ##### Executor Improvements
60
+
61
+ `Scheduler` and `Pool` have the following improvements:
62
+
63
+ * They now support `try_schedule`, which discards tasks and returns `nil` when their internal queues are at capacity.
64
+ * They now have `Unshared` and `Local` variants, running in a Ractor-local context (Pool will manage a Thread pool instead of a Ractor pool).
65
+
66
+ Creates a thread pool with a maximum size of 2 and a queue capacity of 10:
67
+
68
+ ```ruby
69
+ # A thread pool local to the current Ractor
70
+ thread_pool = Farce::Unshared::Pool.new(max_size: 2, capacity: 10)
71
+
72
+ # this should only run approximately 10 tasks on CRuby
73
+ 500.times { thread_pool.try_schedule { puts "Task executed" } }
74
+ ```
75
+
76
+ ##### Tasks
77
+
78
+ A new class, `Task`, has been introduced to represent asynchronous tasks that can be scheduled and executed within Farce's executor framework,
79
+ executed manually, or handed off to any other executor supporting procs or callable objects.
80
+
81
+ ```ruby
82
+ task = Farce::Task.schedule do
83
+ puts "Task started"
84
+ sleep 1
85
+ :success
86
+ ensure
87
+ puts "Task finished"
88
+ end
89
+
90
+ task.alive? # => true
91
+ task.value # => :success (blocks until the task completes)
92
+ ```
93
+
94
+ #### Bug Fixes
95
+
96
+ * Calling `wait_*` methods on atoms on JRuby no longer blocks a fiber scheduler.
97
+
7
98
  ### Farce 0.2.0 (2026-10-11)
8
99
 
9
100
  #### New Features