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."

Reply via email to