Am 31.07.2014 21:19, schrieb Walter Bright:
That's the way assert in C/C++ conventionally worked. But this is
changing. Bearophile's reference made it clear that Microsoft C++ 2013
has already changed, and I've seen discussions for doing the same with
gcc and clang.
This will break so much code :-/
In fact, the whole reason assert is a core language feature rather than
a library notion is I was anticipating making use of assert for
optimization hints.
So why is this not documented?
The assert documentation isn't even clear on when an AssertError is
thrown and when execution is halted (http://dlang.org/contracts.html
doesn't mention halt at all).
And it says "When compiling for release, the assert code is not
generated." - if you implemented assert like this so the optimizer can
assume the assertion to be true even when "assert code is not generated"
this is certainly something developers should be very aware of - and not
once you actually implement that optimization, but from day one, so they
can use assert accordingly!
This thread however shows that many D users (who probably have more D
experience than myself) are not aware that assert() may influence
optimization and would prefer to have separate syntax to tell the
optimizer what values he can expect.
Cheers,
Daniel