Question on @nothrow

Ali Çehreli via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Thu Jun 1 08:17:32 PDT 2017


On 06/01/2017 06:26 AM, Vasileios Anagnostopoulos wrote:

 > how do I know that a function "may throw" an
 > exception in order to use a try/catch/finally block? This is my biggest
 > problem (sorry, coming from a java/C background).

I come from a C++ background so the advices may be different from Java's.

The liberating thing about exceptions is that you simply do not catch 
them. In fact, you're adviced against catching them unless you want to 
or can do something when they are thrown.

If you think that way, you write your code to do its resource management 
automatically with destructors, scope statements (scope(exit), 
scope(exception), and scope(success)), etc.

Say, you want to send a letter by performing certain steps: grab a 
paper, write the letter, grab an envelope, put the letter inside, oops, 
there is no stamp. Throw an exception... If such low or intermediate 
level functions have no idea what the higher layer application code 
wants to do in this case, they simply throw. N layer up, a function 
would want to catch an Exception, log "failed to send to Ali because no 
stamp." So, nobody cared in this example who could throw. They simply 
did their tasks. Of course, it's not always as simple in practice but 
you almost never need to catch exceptions from individual functions.

To contrast, C's error handling is too cumbersome as every single 
programming step must at least be two lines: first do it and then check 
the error code. (Go famously claims that it followed C in this regard 
for simplicity. Since they made other claims and have shown ignorance 
especially at the time of Go's introduction, I will never believe Go 
adopted C's error handling for simplicity.)

Ali



More information about the Digitalmars-d-learn mailing list