Re: How the heck is onInvalidMemoryOperationError() nothrow?

2016-05-06 Thread Jeremy DeHaan via Digitalmars-d-learn

On Friday, 6 May 2016 at 03:24:23 UTC, tsbockman wrote:

On Friday, 6 May 2016 at 02:57:59 UTC, Jeremy DeHaan wrote:

[...]


From the spec 
(https://dlang.org/spec/function.html#nothrow-functions):
"Nothrow functions can only throw exceptions derived from 
class Error."


Throwing an Error is, for many purposes, considered 
fundamentally different than throwing an Exception because 
Error objects aren't meant to be caught by user code. Throwing 
an Error is supposed to just be a way of crashing the program 
with a nice message and stack trace.


A key benefit of this distinction, is that it enables the use 
of `assert()` statements in `nothrow` code.


Oh, interesting. That makes sense, thanks.


Re: How the heck is onInvalidMemoryOperationError() nothrow?

2016-05-05 Thread tsbockman via Digitalmars-d-learn

On Friday, 6 May 2016 at 02:57:59 UTC, Jeremy DeHaan wrote:
In core.exception, we have a lovely function called 
onInvalidMemoryOperationError(). This function is marked as 
nothrow (plus other annotations). This function literally does 
nothing except throwing an error. How can it be marked as 
nothrow?


From the spec 
(https://dlang.org/spec/function.html#nothrow-functions):
"Nothrow functions can only throw exceptions derived from 
class Error."


Throwing an Error is, for many purposes, considered fundamentally 
different than throwing an Exception because Error objects aren't 
meant to be caught by user code. Throwing an Error is supposed to 
just be a way of crashing the program with a nice message and 
stack trace.


A key benefit of this distinction, is that it enables the use of 
`assert()` statements in `nothrow` code.


How the heck is onInvalidMemoryOperationError() nothrow?

2016-05-05 Thread Jeremy DeHaan via Digitalmars-d-learn
In core.exception, we have a lovely function called 
onInvalidMemoryOperationError(). This function is marked as 
nothrow (plus other annotations). This function literally does 
nothing except throwing an error. How can it be marked as nothrow?