Final instance variables
Having a final instance variables in Ruby will allow: to construct thread-save immutable objects without additional synchronisation on instance variable reading
# Immutable and thread-safe class TreeNode attr :left, :right, :value, final: true attr_reader :left, :right, :value def initialize(left, right, value) @left, @right, @value = left, right, value end end
And to fix the an issue shown in the following example:
attr :lock, final: true def initialize @lock = Mutex.new # ... end def a_protected_method @lock.synchronize do # ... end end
The issue lies in initialization of instance variable
@lock which is not ensured to be visible in subsequent call to
a_protected_method method on a different thread.
Summary can be found in this document https://docs.google.com/document/d/1c07qfDArx0bhK9sMr24elaIUdOGudiqBhTIRALEbrYY/edit#.
The aggregating issue of this effort can be found here.