On Monday, 16 November 2015 at 17:12:06 UTC, Steven Schveighoffer
wrote:
One thing, however, is that if you can mark an island of space
within an object as ALWAYS mutable, the compiler can know this
and avoid optimizing away access to those pieces. It would have
to be clearly marked as such, so the optimizations on
non-marked data could still happen.
Yes, that's a necessity, simply to stop the compiler from
applying breaking optimizations. However, then we would lose the
guarantees immutable provides, in particular implicit sharing,
and the implications for purity. That's why this mutability needs
to be restricted, so that it has no observable effects.
I think it could be done, because logical const is possible via
a global lookup table. Any time you go through a cast, however,
this could easily break down.
That's a really good argument: We don't actually introduce new
semantics, we only want make existing techniques more accessible
and efficient.