We made one small clarification in the spec.
Remember that to allow for reflective modifications to final fields,
we allow for the definition of final field safe contexts (FFSC). In
general,
if reads of final fields may not be moved into or out of final field
safe contexts. Thus, if in a final field safe context, you initialize
an object and then modify the final fields of the object using
reflection,
you are guaranteed that code that occurs after the FFSC will see the
updated value for the final field.
Previously, we had been thinking that final field safe contexts would be
handled by some sort of executor like framework. Upon more thought, we
decided that it would be very helpful if a method, such as a clone
method,
could be denoted a final field safe context.
This required a small clarification in the semantics, since values can
now
be passed to and from a FFSC without going through shared memory. The
new clarification (clause d of the rule for memory chains) gives the
required
semantics:
\item[$d)$]
If $r$ is a read
of a final instance field of an object constructed within a final field
safe context
ending with the synthetic action $a$ such that $a \po r$, then
it must be the case that $a \mc r$.
Updated spec at
http://www.cs.umd.edu/~pugh/java/memoryModel/jsr133.pdf
-------------------------------
JavaMemoryModel mailing list - http://www.cs.umd.edu/~pugh/java/memoryModel
This archive was generated by hypermail 2b29 : Thu Oct 13 2005 - 07:01:08 EDT