sclytrack wrote:
weaklypure void reverse(int[] x)
{
for(int i = 0; i * 2 < x.length; i++)
swap(x[i], x[$-1-i]);
}
pure int foo(const(int)[] x)
{
auto x2 = x.dup;
reverse(x2);
// do some calculation on x2
...
return calculation;
}
noglobal void reverse(MyClass x)
{
x.text = "";
}
So weakly-pure should not access global stuff. But that is harder
to track by the compiler with mutable parameters.
Not really. You just need to disallow shared, __gshared in pure function
declarations.
Or weakly-pure is only noglobal when called in pure routines, because of the
immutable barrier.
Unwritten contract, not checked by the compiler? (Like property getters
shouldn't
modify the "state" of the object.)
No. The contract is, that the function only has access to the parameters
you have given it. It depends _only_ on its parameters.
If you've made all parameters immutable or value types, it's strongly
pure.
These additional contracts come automatically from the type system.