Proposal: Definition of @-attributes

Lars T. Kyllingstad public at kyllingen.NOSPAMnet
Thu Jan 28 00:46:49 PST 2010


In the "Function calls" thread the question of "which attributes should 
be in the @-namespace" has again come up.


Problem:
Currently, there doesn't seem to be any clear definition of which 
attributes should be prefixed with @ and which shouldn't.  New 
attributes get an @, while already existing attributes don't, and it all 
seems a bit arbitrary.  Then again, we probably don't want *all* 
attributes to be written with @, as that would just make code look messy:

     @safe @nothrow @private @property int foo() { ... }


Solution (?):
I therefore propose the following definition of @-namespace attributes:

     The @-attributes of a function only place compile-time
     constraints on the body of that function.

Specifically, this means that the @-attributes of a function do not 
place constraints on calling code, change the syntax of calling code, 
nor change the visibility of the function.

The above definition means that the following will be @-attributes:

     @safe, @trusted, @unsafe
     @nothrow, @pure

The following, on the other hand, will be normal keywords:

     private, protected, public
     deprecated, disable
     property

I realise that a major problem with the proposal is that it severely 
limits the possibility of later having user-defined annotations in the 
@-namespace as well.  But I am not convinced this is a good idea anyway.

I'd also suggest the convention that @-attributes are written after the 
function signature, while other attributes are written before:

     private property int foo()  @safe @nothrow { ... }

Comments?

-Lars




More information about the Digitalmars-d mailing list