nothrow by default

apz28 home at home.com
Sun Jan 5 04:37:57 UTC 2020


On Saturday, 4 January 2020 at 21:07:03 UTC, Adam D. Ruppe wrote:
> On Saturday, 4 January 2020 at 20:53:34 UTC, Dennis wrote:
>> Walter's current plan seems to be allowing the `throw` keyword 
>> to be used as an attribute.
>>
>> https://github.com/dlang/DIPs/pull/167/files
>
> that looks good to me btw. I'm against the default change but 
> that DIP appears to do what I'd want - the negating behavior is 
> also well done.
>
>> That still leaves the question how @nogc and pure will be 
>> negated, and how to specify the default attributes for a 
>> module without affecting template functions and functions with 
>> `auto` return-type.
>
> lol we could always use existing keywords like crazy:
>
> pure!false
> @nogc!true
> nothrow!default
> virtual!false
>
> or something similar.
>
> gotta love the double negatives but meh. throw already being a 
> keyword is convenient. pure is already positive so convenient. 
> just @nogc, the odd one out.
>
> but like regardless i wouldn't oppose such a thing.
>
> i also wouldn't oppose impure and @gc keywords added.
>
>
> I also wouldn't oppose templates simply not being affected by 
> scope-level keyword attributes. That might be a winner 
> actually.... maybe. If you want it to apply to the template, 
> you'd just have to explicitly write it again. They get special 
> case because of the inference rule.
>
> Could also mean
>
> @safe class Foo {
>    final void my_template()(); // actually inferred, despite 
> outer @safe
> }
>
>
> idk, just throwing out ideas. To be honest I'd take just about 
> *anything* that actually happens now over some other idea that 
> we have to wait several years for again.

D should make attribute keywords consistent by adding inversed 
value using "!". This will help to reduce the number of 
attributes and a way to inverse the block setting. For any 
attributes that support block in form of ...":" or ...{...}, it 
should apply to all functions & function/delegate alias.
@trusted is a dangerous construct and should not be allowed to be 
use in block construct.

pure
!pure
@gc
@!gc => as current @nogc and depreciate @nogc
throw
!throw => as current nothrow and depreciate nothrow
@safe
@!safe => as current @system and depreciate @system



More information about the Digitalmars-d mailing list