On Tuesday, 15 April 2014 at 09:41:57 UTC, bearophile wrote:
Yes, foo2 is weakly pure, but main is not tagged as pure, so
main is free to use a global reference. If you mark main pure,
your code will not compile even if you comment out the writeln.
D is working as designed here.
3) Using a ref parameter for a pure function seems to me to be
a clear indication of intended side effect.
In D you can also have "const ref". A mutable ref makes the
function "weakly pure" at best.
Wikipedia on pure functions says it's not allowed.
D has both strongly pure and weakly pure functions (and later
the compiler has added "const-ly pure" and another category,
all invisible.
Out does seem somehow different to me, since it's initial
value is by definition throw-away.
Yes, this is true in theory. I don't know if this is also true
in D in practice, because D out has some problems.
Bye,
bearophile
Since this is D-Learn, I can be indignant, and say that D needs
to get its act together, and have a clean definition of 'pure'.
What you describe is not only undocumented, but also far too
complicated - pure weak nothrow dontpiss kissmyass @never, and so
on if the direction continues.
Nontheless, thank you for your assiduous efforets to make D
internally consistent.
Steve