On Thursday, 31 July 2014 at 20:57:10 UTC, Andrei Alexandrescu
wrote:
On 7/31/14, 12:37 PM, Daniel Gibson wrote:
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.
Yah, I think that's a good outcome. We must document assert
better. -- Andrei
Let me try:
"assert() expresses a contract that must be true at that point
for the program to continue correctly.
Compiler (and the optimizer therein) will generate code that
works as intended as long as these contracts are true.
While in Debug mode code for checking the validity of contracts
is actually generated and failure of contracts will result in
halting the program, in Release mode the code is no longer
(guaranteed to be) generated and this results in undefined
behavior.
assert(0) is a special contract that requires no code for its
verification, as it obviously fails. This is why the compiler
will always make it a halting point, in all builds."