What is the point of nothrow?

wjoe none at example.com
Fri Jun 15 17:46:02 UTC 2018


On Friday, 15 June 2018 at 08:13:44 UTC, Kagamin wrote:
> On Wednesday, 13 June 2018 at 17:08:26 UTC, wjoe wrote:
>> My question was more like what's the benefit of having thrown 
>> Errors corrupt your program state  rendering it useless for 
>> debugging ?
>
> D allows various levels of performance and safety. Though I'd 
> say Errors not working in debug mode is not intended, the

Intention matters not. By definition all program state is invalid 
at the point an Error was thrown. From there on it is impossible 
to rely on any output, too, because it could be either correct, 
corrupted, or completely invalid.
Your objects might have been destructed, or maybe not or maybe 
just partially.
The only thing safe to assume is that what you've got is useless.


> optimization should work in release mode which implies debugged 
> code and assumes there are no Errors thrown and you get extra 
> optimization for nothrow functions. Errors are a cheap way to 
> print diagnostic, because you need to do it for unhandled 
> exceptions anyway and it's cross-platform too unlike debugger.

A core dump is created by the OS. In a format that a native 
debugger understands.

> Also leaf functions don't know anything about environment and 
> can't do meaningful I/O, e.g. realistically you have standard 
> output only in console applications and not in other 
> applications.

Exactly. You may not have a console at all, like eg. in Windows 
for the most part, or even Linux if you launch the program from a 
toolbar button, and what about headless configurations. What good 
is printing to stderr in these cases ?

The only sensible thing to do in case of an unrecoverable Error 
is to transfer control back to the OS right away and let it 
handle the rest.
A mechanism of Errors thrown like Exceptions is too tempting to 
mess around with.

Scott Meyers wrote in one of his books, I forget which, that your 
design should be easy to use correctly and hard or impossible to 
use incorrectly. This is not true for D Errors.



More information about the Digitalmars-d-learn mailing list