Guillaume Chatelet:
A very good article by John-Carmack about purity

http://www.altdevblogaday.com/2012/04/26/functional-programming-in-c/

Returning everything by value is the natural functional programming style, but relying on compilers to always perform return value optimization can be hazardous to performance, so passing reference parameter for output of complex data structures is often justifiable, but it has the unfortunate effect of preventing you from declaring the returned value as const to enforce single assignment.<

Is this what he is talking about?

class Foo {
    int x;
}
const(Foo) bar() pure {
    auto f = new Foo;
    f.x = 1;
    return f;
}
void main() pure {}

----------------------

Regarding D purity I have asked for another little improvements:
http://d.puremagic.com/issues/show_bug.cgi?id=7994

It's related to this other example:


import std.string: text;
string foo() {
    return text(1);
}
void main() pure {
    enum s = foo(); // currently an error
}

Bye,
bearophile

Reply via email to