On Thu, 23 May 2013 11:36:00 -0400, Artur Skawina <[email protected]>
wrote:
If it wasn't clear - it is about the _language_, not what some compiler
currently happens to do. Being able to mutate /initialized/ immutables
is a bad idea. IOW you should not be able to modify 'Packet.type' above.
The immutable isn't initialized. The memory it happens to be using before
initialization happens to have the '7' bit pattern in it.
Once it is initialized, I agree it should be immutable from that point on.
Keep in mind that modifying Packet.type is illegal /right now/. Even from
a ctor or static-ctor. This does not need to change when such fields are
no longer always implicitly static. While allowing re-initialization
of immutables from a ctor is possible, it does not really give you much,
while weakening const. (eg by making CT evaluation of such fields
impossible).
That's an issue of where Packet.type lives. It doesn't live inside an
instance right now, in the new version it does.
If Packet.type is not given an initializer, it's inside the instance and
it (correctly IMO) can be modified inside a ctor until it is used.
These rules are perfectly consistent.
I don't see how they make CT evaluation impossible.
-Steve