What is the point of nothrow?

Steven Schveighoffer schveiguy at yahoo.com
Tue Jun 12 16:04:16 UTC 2018


On 6/12/18 11:48 AM, Bauss wrote:
> On Tuesday, 12 June 2018 at 14:19:42 UTC, Steven Schveighoffer wrote:
>> On 6/10/18 7:59 PM, Bauss wrote:
>>> What is the point of nothrow if it can only detect when Exception is 
>>> thrown and not when Error is thrown?
>>>
>>> It seems like the attribute is useless because you can't really use 
>>> it as protection to write bugless, safe code since the nasty bugs 
>>> will pass by just fine.
>>
>> Array invalid index throws Error, and asserts throw Error. I'm not 
>> sure how much you could accomplish without such features. In fact, I'd 
>> consider these ESSENTIAL to writing safe code.
>>
>> Bug-free code is a myth :)
>>
> 
> Both are cases that the compiler __could__ warn you about potential 
> possibility of them being thrown and thus allowing you to write code 
> that makes sure it doesn't happen.
> 
> Ex.
> 
> int a = array[400];
> 
> Could yield a warning stating a possible a out of bounds error.
> 
> Where:
> 
> int a = array.length >= 401 ? array[400] : 0;
> 
> Wouldn't because you're handling the case.
> 
> What I'm trying to say it would be nice to catch certain situations like 
> that (of course not possible with all) because you'll end up having to 
> handle them anyway after the error is thrown.

It's trivial to get into situations that are provably not going to throw 
an error, but for which the compiler still is going to insert the check. 
I think it would end up being more annoying than useful.

If I had it my way, array bounds checks would not be an error, they 
would be an exception (and not be turned off ever for actual arrays).

-Steve


More information about the Digitalmars-d-learn mailing list