DIP6: Attributes

Max Samukha spambox at d-coding.com
Sun Aug 2 11:54:25 PDT 2009


On Sun, 02 Aug 2009 07:54:49 -0700, Robert Fraser
<fraserofthenight at gmail.com> wrote:

>Max Samukha wrote:
>> On Sat, 01 Aug 2009 15:24:26 -0700, Robert Fraser
>> <fraserofthenight at gmail.com> wrote:
>> 
>>> Ary Borenszweig wrote:
>>>> http://www.prowiki.org/wiki4d/wiki.cgi?LanguageDevel/DIPs/DIP6
>>> I think annotations are a good idea, but turning keywords already in the 
>>> language into annotations seems kinda pointless & would kill backwards 
>>> compatibility. In C#/Java some things are modifiers while others are 
>>> annotations -- and with good reason.
>>>
>>> IMO, the focus of annotations should be mostly on things _external_ to 
>>> the compiler. So, serializability, thread safety, etc. Really, I think 
>>> annotations should be for compile-time reflection (so like someone else 
>>> said __traits(annotations, symbol) should return a tuple of annotation 
>>> structs.
>> 
>> Please not a tuple of structs but a tuple of tuples. One should be
>> able to specify types and aliases as annotation parameters.
>
>I wish that's work, but Tuples flatten themselves.

Yes, but we can define a non-flattening tuple:

template CannedTuple(A...)
{
    alias A tuple;
}

Then we can have tuples of tuples:

alias Tuple!(CannedTuple!(...), CannedTuple!(...), ...) annotations;

// I guess, the first element should be the annotation name?
enum annotationName = annotations[0].tuple[0]; 

We already can emulate custom attributes with mixins, though this
requires template trickery that sometimes is overwhelming. So some
syntax sugar would be welcome.





More information about the Digitalmars-d mailing list