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

Steven Schveighoffer wrote:
On Fri, 17 Dec 2010 09:39:19 -0500, Don <nos...@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

Reply via email to