assert(0) behavior
via Digitalmars-d
digitalmars-d at puremagic.com
Tue Aug 4 22:51:30 PDT 2015
On Tuesday, 4 August 2015 at 23:06:44 UTC, John Colvin wrote:
> I'm 90% on Walter's side here as he's right for the majority of
> common cases, but on the other hand there are plenty of
> situations where the boundary between code error and
> environment error get blurred.
Well, the principled difference is that asserts are
program-specification-annotations and should not in any way
affect execution within the code unit, and if it does it should
happen as if it was detected by a hypothetical supervisor
external to the program.
E.g. for a batch program terminate and have the calling context
unwind any side-effects (as in a transaction), or for an
interactive program to enter emergency mode, save state in a
temporary file and try to recover after restart.
Asserts are reflecting system specifications (not code, or just
applying to code).
If you want to take height for code errors you should use enforce
or throw. It makes plenty of sense to assume that code have
errors, and to recover from it, but using asserts does not assume
that you have errors. It is just a way to add specification to
the code for validation/documentation purposes.
I don't want those in release at all. I have way to many asserts
for that.
So this goes much deeper than you and Walter suggest.
More information about the Digitalmars-d
mailing list