digitalmars.D.learn - What is the exact meaning of 'nothrow'?
- Yuxuan Shui (4/4) Jun 10 2015 I want to know exactly what is considered to be 'throw'.
- =?UTF-8?B?QWxpIMOHZWhyZWxp?= (17/20) Jun 10 2015 Yes, the documentation is minimal: :)
- Yuxuan Shui (2/27) Jun 10 2015 Thanks, that clear things up.
- Mike (4/13) Jun 10 2015 Feel free to donate those finely worded statements to the
- ZombineDev (19/23) Jun 10 2015 In D there are two types of exceptions: logic errors (derived
- ZombineDev (4/14) Jun 10 2015 ... catches *all possible exceptions*), ...
I want to know exactly what is considered to be 'throw'. I'm able to use dynamic arrays (which can throw 'Range violation') and asserts in a nothrow function. Shouldn't those be considered 'throw'?
Jun 10 2015
On 06/10/2015 05:06 PM, Yuxuan Shui wrote:I want to know exactly what is considered to be 'throw'. I'm able to use dynamic arrays (which can throw 'Range violation') and asserts in a nothrow function. Shouldn't those be considered 'throw'?Yes, the documentation is minimal: :) http://dlang.org/function.html#nothrow-functions It says "Nothrow functions do not throw any exceptions derived from class Exception." I have more information here but the language is misleading: http://ddili.org/ders/d.en/functions_more.html#ix_functions_more.nothrow I am going to add something like the following to clarify: "Note: Remember that it is not recommended to catch Error nor its base class Throwable. What I mean by "any exception" here is "any exception that is defined under the Exception hierarchy." A nothrow function can still emit exceptions that are under the Error hierarchy, which represents irrecoverable error conditions that should preclude the program from continuing its execution." In other words, nothrow means "does not emit Exception, it can still emit Error." Ali
Jun 10 2015
On Thursday, 11 June 2015 at 00:27:36 UTC, Ali Çehreli wrote:On 06/10/2015 05:06 PM, Yuxuan Shui wrote:Thanks, that clear things up.I want to know exactly what is considered to be 'throw'. I'm able to use dynamic arrays (which can throw 'Range violation') and asserts in a nothrow function. Shouldn't those be considered 'throw'?Yes, the documentation is minimal: :) http://dlang.org/function.html#nothrow-functions It says "Nothrow functions do not throw any exceptions derived from class Exception." I have more information here but the language is misleading: http://ddili.org/ders/d.en/functions_more.html#ix_functions_more.nothrow I am going to add something like the following to clarify: "Note: Remember that it is not recommended to catch Error nor its base class Throwable. What I mean by "any exception" here is "any exception that is defined under the Exception hierarchy." A nothrow function can still emit exceptions that are under the Error hierarchy, which represents irrecoverable error conditions that should preclude the program from continuing its execution." In other words, nothrow means "does not emit Exception, it can still emit Error." Ali
Jun 10 2015
On Thursday, 11 June 2015 at 00:27:36 UTC, Ali Çehreli wrote:"Note: Remember that it is not recommended to catch Error nor its base class Throwable. What I mean by "any exception" here is "any exception that is defined under the Exception hierarchy." A nothrow function can still emit exceptions that are under the Error hierarchy, which represents irrecoverable error conditions that should preclude the program from continuing its execution." In other words, nothrow means "does not emit Exception, it can still emit Error."Feel free to donate those finely worded statements to the official docs. Mike
Jun 10 2015
On Thursday, 11 June 2015 at 00:06:24 UTC, Yuxuan Shui wrote:I want to know exactly what is considered to be 'throw'. I'm able to use dynamic arrays (which can throw 'Range violation') and asserts in a nothrow function. Shouldn't those be considered 'throw'?In D there are two types of exceptions: logic errors (derived from 'Error') and environment exceptions (derived from 'Exception'). Logic errors are considered to be irrecoverable (eg. your program should be terminated because people generally don't write code to handle them - no one wraps their array accesses in try {...} catch {...}) Environment exceptions are stuff like user input and network and file access. This are problems that you generally want to handle and that's why they're considered recoverable. So 'Exception's propagate through function calls and 'Error's terminate the program immediately. A function 'f' marked as "nothrow" indicates that no exceptions shall escape from it (if a function that 'f' calls can throw, 'f' must written, so that it catches the exception), but since 'Error's terminate the program immediately the callers of 'f' should not care about them and that's why 'Error's don't brake the 'nothrow' promise of 'f'.
Jun 10 2015
On Thursday, 11 June 2015 at 00:32:45 UTC, ZombineDev wrote:Environment exceptions are stuff like user input and network and file access. This are problems that you generally want to... These* are ...handle and that's why they're considered recoverable. So 'Exception's propagate through function calls and 'Error's terminate the program immediately. A function 'f' marked as "nothrow" indicates that no exceptions shall escape from it (if a function that 'f' calls can throw, 'f' must written, so that it catches the exception), but since... catches *all possible exceptions*), ...'Error's terminate the program immediately the callers of 'f' should not care about them and that's why 'Error's don't brake... don't break* ...
Jun 10 2015