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