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

Reply via email to