Purity

Steven Schveighoffer schveiguy at yahoo.com
Sun Dec 19 06:16:04 PST 2010


On Sat, 18 Dec 2010 01:27:40 -0500, Don <nospam at nospam.com> wrote:

> Steven Schveighoffer wrote:
>> On Fri, 17 Dec 2010 09:39:19 -0500, Don <nospam at nospam.com> wrote:
>>
>>> A function which has immutably pure parameters can undergo *some*  
>>> optimisation, even if the return value is a mutable pointer.
>>> For example, if the parameters are identical for both calls, you can  
>>> do a deepdup of the first return value instead of calling the function  
>>> again.
>>  Yes, I agree with this.  However, I still believe statement 1 is still  
>> correct, because you really have just introduced a third class of pure  
>> functions that I was not aware of :)
>>  So we have:
>>  weak-pure functions : functions which can accept and return any type  
>> of values, but can only call pure functions and cannot access global  
>> state.
>> middle-pure ? functions : weak-pure functions which accept only  
>> immutable or implicitly convertable to immutable values, but returns a  
>> mutable reference.
>
>
>> strong-pure funtions : pure functions which accept and return only  
>> immutable or implicitly convertible to immutable values.
>>  There actually could be another class, const-pure functions: pure  
>> functions which accept and return only const or implicitly convertible  
>> to const values.
>
> The problem with these ones, is there could be aliasing between the  
> input and the output. Do they have any interesting properties?

They can act like strong-pure functions when all the arguments being  
passed in are IOICTI (immutable or implicitly convertable to immutable).

> Another interesting one is a function with all-const parameters, that  
> returns a mutable reference that has only mutable or immutable members.
> (ie, nothing const). Like the one you've called middle-pure, this  
> returns a unique result, because you're guaranteed there is no aliasing.

Yes.

>
>
>> I suspect the compiler will need to classify things as strong or weak  
>> pure, and store various attributes on weak-pure functions to see what  
>> optimizations can be had.
>
> The compiler does that already.

OK, good.

-Steve


More information about the Digitalmars-d mailing list