On Friday, 6 April 2012 at 06:47:56 UTC, Walter Bright wrote:
On 4/5/2012 5:00 AM, Manu wrote:
> C# and Java both have attributes, following these established
design patterns, I
> don't think there should be any mystery over how they should
be implemented.

I was thinking of something along the lines of what has been proposed here earlier:

  @attr(identifier = expression)

as a storage class, like:

  @attr(foo = bar + 1) int x;

and then:

  __traits(hasAttribute, x, foo)

would return true, and:

  __traits(getAttribute, x, foo)

would return the expression (bar+1). The expression would be compile-time only, evaluated at the point of declaration.

The implementation is simple enough, just attach to each symbol an array of (identifier,expression) pairs.

You could also omit the expression, and just have:

  @attr(bar) int y;

I like it. Perhaps

    @attr(bar)

could be equivalent to

    @attr(bar = true)

so you don't get any weird failure state for __traits(getAttribute?

Reply via email to