On Wed, 16 Mar 2011 22:10:01 -0400, Andrei Alexandrescu
<seewebsiteforem...@erdani.org> wrote:
On 03/16/2011 08:53 PM, bearophile wrote:
Andrei:
Yum, love the enforce.
You are silly :-)
So perhaps the language could be improved as enforce does not break
purity.
Currently enforce() uses a lazy argument. A lazy argument is a
delegate, and generally such delegate can't be pure, because the
expressions you give to enforce() usually refer to variables in the
scope where you call enforce(). So what kind of language improvements
are you thinking about?
I haven't thought through it. Clearly this is a false positive, a
restriction that should be at best removed.
int x;
void foo(int i)
{
enforce(i == 5, to!string(x = 5)); // if enforce is pure, this will
mean the global x could be affected inside the function
}
I don't think enforce can be straight pure. It can only be pure when
called from pure functions. A so-called conditional purity.
If we have auto purity, then I think the compiler could sort this out.
-Steve