On 2011-06-16 11:59, Steven Schveighoffer wrote: > On Thu, 16 Jun 2011 14:33:17 -0400, Jonathan M Davis <jmdavisp...@gmx.com> > > wrote: > > On 2011-06-16 10:38, Charles McAnany wrote: > >> Ok, I think I get it. That cleared it up. =). > >> So, if you have a functioned labelled pure, it's your job to not pass it > >> mutable arguments, but the compiler's job to make sure it doesn't mutate > >> anything not in the arguments. And that's why a strongly pure function > >> can > >> call a weakly pure one - only the first function's internal state can be > >> mutated by a weakly pure function. Thanks! > > > > Well, essentially. But it's a question of parameters, not arguments. It > > doesn't matter whether you pass the function mutable arguments or not. > > Actually, it can matter. For instance, a pure function like this: > > pure int foo(const(int)* m); > > can be strong pure if you pass it a pointer to immutable data.
I believe that every time that Don has discussed it, he has made it clear that it's entirely a matter of the function's signature and that all parameters must be immutable or implicitly convertible to immutable for a function to be strongly pure. So, that's what I'm going by. However, I can see how passing immutable values to a pure function with const parameters could be optimized out just like if the parameters were actually immutable. So, it may be that things were changed so that that counts as well. Everything that I've seen discussed on it though has been about the parameters all having to be immutable or implicitly convertible to immutable. - Jonathan M Davis