On 02.04.2018 10:04, Shachar Shemesh wrote:
On 02/04/18 10:45, Jonathan M Davis wrote:
Honestly, I think at this point pure is easier to understand if you think of
it as @noglobal and don't think about functional purity at all.

That's fine. My point was that the only optimizations possible are possible on strictly pure functions (the immutable cast one included). Weakly pure functions add nothing.
...

That point is wrong. It would be wrong even if your next point was true.

But merely having them around means that when I annotate a function with "pure", I do not promise any guarantees that the compiler can actually use to perform optimizations.

Shachar

Yes, actually you do.

For example, if you have:

void foo(int[] x)pure;

void main(){
    auto x = [1];
    auto y = x.dup;
    foo(x);
    foo(y);
}

This can be transformed into:

void main(){
    auto x = [1];
    foo(x);
    auto y = x.dup;
}

Pure functions have deterministic side-effects.

Reply via email to