Pure not acting pure.

Steven Schveighoffer schveiguy at yahoo.com
Thu Jun 16 13:47:24 PDT 2011


On Thu, 16 Jun 2011 16:36:01 -0400, Jonathan M Davis <jmdavisProg at gmx.com>  
wrote:

> 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.

Don's the one who brought it to my attention (have no idea what thread it  
was in...) that the optimizations could be done based on this.

AFAIK, this optimization is not implemented.

-Steve


More information about the Digitalmars-d-learn mailing list