On Saturday, 7 November 2015 at 21:24:02 UTC, Fyodor Ustinov wrote:
Colleagues, IMHO:

If "assert" catch "fundamental programmers errors" - it should hang programm immediately with and without "-release".

If "assert" catch not "too fundamental" errors - assert(0) should emit "Error" in both cases.

Third option - assert(0) - it's a "special case" and halt program in both cases.

But there should't be so that in one case the "fundamental error" and the other "not fundamental".

It's my opinion.

WBR,
    Fyodor.

I strongly disagree. Without `-release`, the job of "fundamental programmers errors" is not to stop the program and prevent farther corruption(which is pointless - how do you know executing the `scope(exit)` and `scope(failure)` blocks will increase the corruption? Maybe they'll reduce it?), because when you are developing you shouldn't work with the only copies of important data files. Without `-release`, the role of `assert`s(and `Error`s in general) is the help the programmer fix these bugs.

When I have a "fundamental programmer error" in my code, I prefer to get a stack trace from the exception mechanism than to find a core dump(that was hopefully generated) and rely on GDB's excellent support for D to analyze it.

Besides, there are some very specific cases where it's acceptable to catch `Error`s - one of them is when you have a logging mechanism that can log these errors in a way/place that's easier for you to read - and then of course re-throws them. Halting the program on errors prevents this logging mechanism from doing it's thing.

Reply via email to