Should pure nothrow ---> @pure @nothrow ?
Don
nospam at nospam.com
Fri Nov 27 12:59:00 PST 2009
Ary Borenszweig wrote:
> Don wrote:
>> #ponce wrote:
>>>> Definitely. And what about @deprecated and @override?
>>>
>>> As override is now required, i don't think it should be an attribute.
>>
>> As I understand it, one of the characteristics of attributes is that
>> you should be able to remove them from the entire program, without
>> affecting the behaviour.
>
> This is not correct. For example in C# you have the Flags attribute for
> enums:
>
> enum Foo {
> One = 1,
> Two = 2,
> Three = 4,
> }
>
> You can't do:
>
> var x = Foo.One | Foo.Two;
>
> but if you do:
>
> [Flags]
> enum Foo { ... }
>
> you can do it now.
>
> Also see this:
> http://msdn.microsoft.com/en-us/library/system.flagsattribute(VS.71).aspx
>
> Removing the Flags attribute changes program behaviour. An attribute,
> indeed, tells someone (the compiler, the programmer, an external tool)
> that a symbol has some attribute. It could change the program if the
> compiler is the one using that attribute. So in theory every attribute
> in D could be an @attribute.
Interesting. I think if we go to that extreme, the annotations would
just end up being keywords, but slightly uglier.
It seems clear that if @safe is an annotation, then @pure and @nothrow
are, too.
I also think that the huge body of C++, Java, C# (and even D!) code sets
a precedent that public, protected, extern, and private should not be
annotations -- I'd suggest that if it is a keyword in C or C++, it
should not be an annotation. (Although that would make align a keyword,
not an annotation, though it'd otherwise be a candidate).
Beyond that, I'm not really sure. I'd tentatively go for @deprecated,
and @property seems to have been decided, but for override -- no idea.
More information about the Digitalmars-d
mailing list