Ractor::LocalVariable
Add Ractor-local storage.
Installation
Add this line to your application's Gemfile:
gem 'ractor-local_variable'
Usage
STORAGE = Ractor::LocalVariable.new { [] }
STORAGE.ractor_local_value << 1
Thread.new { STORAGE.ractor_local_value << 2 }.join
Ractor.new do
STORAGE.ractor_local_value << 3
Thread.new { STORAGE.ractor_local_value << 4 }.join
puts "In Ractor: ", STORAGE.ractor_local_value
end.take
puts "In Main: ", STORAGE.ractor_local_value
You can also use a variant that delegates calls to the value:
STORAGE = Ractor::LocalVariable.new(delegate: true) { [] }
STORAGE << 1
Thread.new { STORAGE << 2 }.join
Ractor.new do
STORAGE << 3
Thread.new { STORAGE << 4 }.join
puts "In Ractor: ", STORAGE
end.take
puts "In Main: ", STORAGE
In this case, be careful to not do ractor.send(STORAGE)
since no call is made to the object; you'll need to call ractor_local_value
in a case like that.
Development
After checking out the repo, run bin/setup
to install dependencies. Then, run rake spec
to run the tests. You can also run bin/console
for an interactive prompt that will allow you to experiment.
To install this gem onto your local machine, run bundle exec rake install
. To release a new version, update the version number in version.rb
, and then run bundle exec rake release
, which will create a git tag for the version, push git commits and tags, and push the .gem
file to rubygems.org.
Contributing
Bug reports and pull requests are welcome on GitHub at https://github.com/marcandre/ractor-local_variable. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the code of conduct.
License
The gem is available as open source under the terms of the MIT License.
Code of Conduct
Everyone interacting in the Ractor::LocalVariable project's codebases, issue trackers, chat rooms and mailing lists is expected to follow the code of conduct.