digitalmars.D.learn - Meaning of pure member function
- "H. S. Teoh" <hsteoh quickfur.ath.cx> Jan 16 2012
- "Jesse Phillips" <jessekphillips+D gmail.com> Jan 16 2012
- Joshua Reusch <yoschi arkandos.de> Jan 17 2012
The following code compiles without error:
class C {
int x;
// what does 'pure void' mean??
pure void f() {
x++; // why is this legal?
}
}
What does 'pure' mean when applied to a member function? Based on
Andrei's book, 'pure' means that the function's result depends only on
its input. And based on the fact this code compiles, I deduced that
'this' is included as part of the function's input.
However, the function is clearly changing one of its inputs (changing a
member of 'this'). Furthermore, what on earth is 'pure void' supposed to
mean and why does the compiler accept it?
Changing the function to read:
pure int f() { return x++; }
also compiles without any complaint from the compiler. Yet calling
writeln() from within f() produces an error. Why?
T
--
Computerese Irregular Verb Conjugation: I have preferences. You have
biases. He/She has prejudices. -- Gene Wirchenko
Jan 16 2012
On Tuesday, 17 January 2012 at 05:16:33 UTC, H. S. Teoh wrote:The following code compiles without error: class C { int x; // what does 'pure void' mean?? pure void f() { x++; // why is this legal? } } What does 'pure' mean when applied to a member function?
This is a weakly pure function usable by strongly pure functions. Namely it is a helper function to those that can claim to be strongly pure. Maybe bearophile's blog will shed some light: http://leonardo-m.livejournal.com/99194.html Or stackoverflow: http://stackoverflow.com/questions/5812186/pure-functional-programming-in-dFurthermore, what on earth is 'pure void' supposed to mean and why does the compiler accept it?
Well it can only be useful as a weakly pure function as those are allowed to modify their arguments. In any case, if the function was strongly pure: pure void foo() {} any call to it would just be eliminated as having no side effects.
Jan 16 2012
Am 17.01.2012 17:19, schrieb Jesse Phillips:On Tuesday, 17 January 2012 at 16:07:08 UTC, H. S. Teoh wrote:Do the current D compilers implement memoization?
Not that I know of.
dmd not, but phobos: http://dlang.org/phobos/std_functional.html#memoize But as a library implementation, it is not applied automatically. PS: The dlang.org site appears to be faster as usual ! Great news :)
Jan 17 2012








Joshua Reusch <yoschi arkandos.de>