Vision for the D language - stabilizing complexity?
Andrei Alexandrescu via Digitalmars-d
digitalmars-d at puremagic.com
Wed Jul 13 04:28:11 PDT 2016
On 7/13/16 5:19 AM, John Colvin wrote:
> "Casting away immutable is undefined behaviour": the following code has
> undefined results (note, not implementation defined, not
> if-you-know-what-you're-doing defined, undefined), despite not doing
> anything much:
>
> void foo()
> {
> immutable a = new int;
> auto b = cast(int*)a;
> }
>
> "modifying immutable data is undefined": The above code is fine, but the
> following is still undefined:
>
> void foo()
> {
> immutable a = new int;
> auto b = cast(int*)a;
> b = 3;
> }
Interesting distinction. We must render the latter undefined but not the
former. Consider:
struct S { immutable int a; int b; }
S s;
immutable int* p = &s.a;
It may be the case that you need to get to s.b (and change it) when all
you have is p, which is a pointer to s.a. This is essentially what makes
AffixAllocator work.
Andrei
More information about the Digitalmars-d
mailing list