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

Reply via email to