On 12/16/2013 01:53 AM, Walter Bright wrote:
On 12/15/2013 4:22 PM, jerro wrote:
You, as the guy who wrote the code, will (or should) know that there
are no
other live references, hence you are telling the compiler "trust me,
I know
there aren't any".
So, is the intended meaning the following: If there exist any immutable
references to the data, mutating it results in undefined behavior? If
so, I
think the documentation on creating immutable data should explicitly
say so.
Good idea. I suggest writing a pull request against the documentation
for this.
We need to be careful to do this right.
Consider what happens when we want to dispose memory using our custom
allocator. The caller clearly needs to own an immutable reference in
order to cast it to mutable and pass it to the storage allocator, where
it will be freed in some way that will sometimes involve updating some
metadata accessible through it. The immutable reference will not be gone
during this process. [1]
Furthermore, existence of references may be indeterministic due to the
garbage collector, and the language does not make any guarantees that
anything is ever collected at all.
Informally speaking, the final specification should probably allow in
some way immutable references to mutated data to _exist_, but not define
_access_ to them.
[1] The language does not allow ownership to be tracked.