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?