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.