exceptions vs error codes

Chris Wright via Digitalmars-d digitalmars-d at puremagic.com
Wed Jul 13 06:13:45 PDT 2016


On Sun, 10 Jul 2016 16:57:49 +0000, ketmar wrote:

> On Sunday, 10 July 2016 at 16:47:31 UTC, Chris Wright wrote:
>> You do need a try/catch in every annotated function to catch runtime
>> exceptions like OutOfMemoryError.
> 
> as a side note: it is even not guaranteed that one *can* catch Error.

This is just plain wrong. The spec explicitly talks about catching Error 
(in the docs about TryStatement) and how to do it. I guess in the most 
general case, you're not guaranteed that your CPU won't catch fire in 
between the throw statement and the catch block? In which case we might 
as well throw out all programming -- and cognition, since I might get hit 
by a meteor while I'm pondering.

> and it is plainly wrong to try to continue execution after that, as
> program is in undefined state.

Also wrong. The spec defines the differences between Error and other 
Throwables. It involves how exception chaining works, if you throw an 
exception while handling an exception. It notably does not say that your 
program is in an undefined state after catching an Error.

You might be saying that I could forget to clean up resources or restore 
invariants after an Error is thrown. But that's also true of any 
Throwable. Or a return statement. Again, if this sort of error bothers 
you so much that you refuse to write any code that could trigger it, you 
can't write *any* code.


More information about the Digitalmars-d mailing list