Custom attributes (again)
    Steven Schveighoffer 
    schveiguy at yahoo.com
       
    Fri Apr  6 05:58:20 PDT 2012
    
    
  
On Fri, 06 Apr 2012 03:54:15 -0400, Walter Bright  
<newshound2 at digitalmars.com> wrote:
> On 4/6/2012 12:49 AM, Alex Rønne Petersen wrote:
>> What about type declarations? I think those ought to be supported too.  
>> E.g. it
>> makes sense to mark an entire type as @attr(serializable) (or the  
>> inverse).
>
>
> That would make it a "type constructor", not a storage class, which we  
> talked about earlier in the thread. I refer you to that discussion.
I think there is a huge misunderstanding here.
A type constructor alters a type.  Annotations are not type constructors.
for example:
class C {}
@foo class D {}
@foo C c;
@foo2 D d;
D d2 = d;
In all these cases, the @foo or @foo2 affects the *declaration*, not the  
*type*.  So:
1. D's type is not affected, it's still class D.  But an annotation has  
been stored on the *symbol* D, such that it can be looked up later.
2. annotations on variables do *not* affect the type of the variable.  The  
assignment to d2 works fine.
3. The following symbols have annotations attached to them:
   C: none
   D: @foo
   c: @foo
   d: @foo2
   d2: none
Note that d and d2 have no annotations attached even though they are of  
type D.  Because the type isn't affected by annotations.
An annotation is simply metadata, stored in the compiler, and looked up  
via compiler directives.  Optionally (and I would encourage this),  
TypeInfo would store annotations on type declarations for retrieval at  
runtime.
-Steve
    
    
More information about the Digitalmars-d
mailing list