On 06/22/2017 08:38 PM, Boris-Barboris wrote:
Casts are part of the type system. Yes, D type system allows invalid operations. It's not the compiler's fault, it's type system's fault.

unittest
{
     immutable int a = 4;
     int* b = cast(int*) &a;
     *b = 5;
     assert(*(&a) == 5);
     assert(a == 4);
}

This is just arguing semantics, of course, but I wouldn't say that the type system allows this specific invalid operation. Rather, with casting you can step out of the type system, and break its guarantees.

Point is, you need a way to say that the operation is invalid. It's invalid because it breaks what `immutable` promises. `immutable` is part of the type, so I'd say the guarantee is part of the type system.

Reply via email to