On Wednesday, 30 July 2014 at 20:47:30 UTC, Walter Bright wrote:
On 7/30/2014 7:36 AM, Ary Borenszweig wrote:
Now, if you compile in release mode, according to Walter, all the "asserts" are gone (which, as a side note, is something I don't like: in every case it should throw an AssertError). So the question is: can the compiler still replace that
writeln call?

Yes.

This on the other hand is a terrible, terrible misuse of assert.

You need distinguish between what is assumed to hold and what is proved to hold to chain together pieces of proven programs. So what one function require (preconditions) you need to assert before calling the function. On the other hand, what the function asserts you can assume to hold after the call.

So:

assert(X)
---- function call to precompiled library code
assume(X)
...statements
assert(Y)
---- function return from precompiled library code
assume(Y)


Pretty clear, now huh?

Reply via email to