On Tuesday, 11 June 2013 at 07:00:29 UTC, Jacob Carlborg wrote:
The idea is to have a kind of meta UDA called "attribute". This attribute needs to be attached to all structs, enums and so on that is to be used as an attribute.

The module provides a template (getAttributes) to get, by default, only those values attached to a given symbol that is an attribute. That is, marked with the "attribute" attribute.

So my suggestion for guidelines are:

* Only types with the "attribute" UDA is to be used as attributes
* In general, don't use primitive values as a UDA

Don't use this

@(3) int a;

Use this:

@attribute struct foo { int b; }

@foo(3) int a;

* A user defined type marked with "attribute" should not be used for something else than an UDA

* All attributes use camel case names

Camel case has two versions - and I suggest to use the one that starts with capital - that is, `@attribute struct FooBar` and not `@attribute struct fooBar`. This will save a lot of trouble when we want to add new keyword attributes.

The exception is the `attribute` attribute itself - in the future we might want to make it a keyword attribute(so we can, for example, enforce it's usage for attributes), and it that case it would be helpful if all UDAs already use it.

Reply via email to