Memory allocation purity
Timon Gehr via Digitalmars-d
digitalmars-d at puremagic.com
Mon May 19 12:23:43 PDT 2014
On 05/19/2014 09:03 PM, Dicebot wrote:
>
> immutable(Object*) alloc() pure
> {
> return new Object();
> }
>
> bool oops() pure
> {
> auto a = alloc();
> auto b = alloc();
> return a is b;
> }
>
> This is a snippet that will always return `true` if memoization is at
> work and `false` if strongly pure function will get actually called
> twice. If changing result of your program because of silently enabled
> compiler optimization does not indicate a broken compiler I don't know
> what does.
Furthermore, it may not at all be obvious that this is happening: After
all, purity can be inferred for template-heavy code, and comparing
addresses will not prevent purity inference.
More information about the Digitalmars-d
mailing list