Pure Contract bug?

Era Scarecrow rtcvb32 at yahoo.com
Sat Feb 4 15:15:12 PST 2012


> Probably the restriction was lifted after TDPL was out.


> Yes. The compiler will only reorder/run in parallel/optimize if 
> it is safe (not changing execution semantics). Pure can be used 
> to prove that certain optimizations are safe. If a pure 
> function only takes const or immutable arguments, the compiler 
> has more guarantees and can do more things. If a pure function 
> takes mutable arguments, it can be used as a component of other 
> pure functions (important!), but the kind of optimizations that 
> can be performed directly on them are a lot more limited.
>
> 'Pure' means that the behavior of the function does not change 
> between invocations with the same/equivalent arguments. This 
> can include mutating actions on the arguments, if those are 
> typed mutable.


Even if you changed the signature of the pure function to 'pure 
int squaredPlus(immutable int);' you'd have the same problem; 
Because the int argument it receives is a copy so it won't matter 
if it was mutable or not. (If it were an object, then it would be 
more enforced).

I'll refer to the language specs to see if I can find an answer 
on this, but it feels wrong allowing access to 'this' on mutable 
data; I thought it could only mutate it's own data in regards to 
local variables and arguments it owned.


More information about the Digitalmars-d-learn mailing list