Pure not acting pure.

Jonathan M Davis jmdavisProg at gmx.com
Thu Jun 16 13:36:01 PDT 2011


On 2011-06-16 11:59, Steven Schveighoffer wrote:
> On Thu, 16 Jun 2011 14:33:17 -0400, Jonathan M Davis <jmdavisProg at 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


More information about the Digitalmars-d-learn mailing list