On 04/06/2012 11:41 AM, Johannes Pfau wrote:
Syntax in D would be different of course, but I see absolutely no need for the redundant (and ugly) @attr. Declaring a custom attribute: --------- module std.something; struct Author { string name; public this(string name) { this.name = name; } } --------- Using it: --------- import std.something; //Usual namespace lookup rules apply to attributes /* * @Author(param) calls the constructor of the Author struct and * attaches the struct instance to test. Probably @Author (without * parenthesis) coud be made to mean std.something.Author.init */ @Author("Johannes Pfau") int test; --------- Attaching attributes multiple times as in C# should be possible. Using reflection to get that attribute: --------- if(__traits(hasAttribute, test, std.something.Author)) { Author[] authors = __traits(getAttribute, test, std.something.Author); } --------- An array is used here to support attaching the same attribute multiple times. Of course "auto authors = ..." should be usable here too.
This all seems very reasonable. I think this is how things should work. (maybe syntax will need to be different, because Walter does not seem to like the idea of un-reserving @identifier.)