💬
[Feature #20715] Ractor ローカルな値を参照する Ractor.[] / Ractor.[]= を追加する提案
[Feature #20715] Ractor.[]
and Ractor.[]=
to access Ractor local storage
-
Ractor
ローカルな値を参照するRactor.[] / Ractor.[]=
を追加する提案 - 現状でも
Ractor#[] / Ractor#[]=
が存在しているんですがこれもRactor
ローカルな値を参照しているので実際にはRactor
のインスタンスオブジェクトには依存していないみたいですね
p Ractor.current # => #<Ractor:#1 running>
Ractor.current[:foo] = 42
Ractor.new{
# トップレベルの Ractor.current と同じオブジェクトを返す
p Ractor.main # => #<Ractor:#1 running>
# ただし、トップレベルで保存した値は参照されない
p Ractor.main[:foo] # => nil
}.take
- なので
Ractor.current
を経由して参照するよりもRactor.[] / Ractor.[]=
で参照するほうが効率がよいとのこと - これは開発版の Ruby 3.4-dev ですでに対応済です
# Ractor[]= で値を割り当てて
Ractor[:foo] = 42
Ractor.new{
Ractor[:foo] = "other"
p Ractor[:foo] # => "other"
}.take
# Ractor[] で参照できる
# この値は他の Ractor 内での値は反映されない
p Ractor[:foo] # => 42
Discussion