Comparing Exceptions and Errors

kdevel kdevel at vogtner.de
Sun Jun 5 12:45:47 UTC 2022


On Sunday, 5 June 2022 at 01:43:06 UTC, Steven Schveighoffer 
wrote:

[...]

> But you aren't perfect, and so maybe you make a mistake, and 
> trigger an Error. The compiler handles this unexpected 
> condition by unwinding the stack back to the main function, 
> printing the error and exiting, so you can go fix whatever 
> mistake you made.

For this purpose nobody needs a separate subclass named `Error`. 
That works with `Exception`s.

[...]

>> If the code threw an `Exception` instead of an `Error` 
>> everything would be fine.
>
> I think the point of Errors is that you can remove them for 
> efficiency.

elephant/room.

> In other words, just like asserts or bounds checks, they are 
> not expected to be part of the normal working program.

"removing [Errors, asserts, bounds checks] is a bit like wearing 
a life-jacket to practice in the harbour, but then leaving the 
life-jackets behind when your ship leaves for open ocean" [1]

[...]
> Consider the normal flow of a range in a foreach loop, it's:
>
> ```d
> // foreach(elem; range)
> for(auto r = range; !r.empty; r.popFront) {
>     auto elem = r.front;
> }
> ```
>
> If both `popFront` and `front` also always call `empty` you are 
> calling `empty` 3 times per loop, with an identical value for 
> the 2nd and 3rd calls.

Solution: Implement explicitly unchecked popFront() and front() 
versions.

> Having the assert allows diagnosing invalid programs without 
> crashing your program,

That depends on the understanding of "crashing a program". If 
library code throws an `Error` instead of an `Exception` I have 
to isolate that code in a subprocess in order to make my program 
gracefully handle the error condition.

Think of CGI processes which provide output direct to a customer. 
If there is an assert the customer will see the famous Internal 
Server Error message (in case of apache httpd).

[...]

[1] http://wiki.c2.com/?AssertionsAsDefensiveProgramming


More information about the Digitalmars-d-learn mailing list