On Tuesday, 11 June 2013 at 20:31:22 UTC, Jacob Carlborg wrote:
On 2013-06-11 18:12, QAston wrote:
I agree that attributes should have types - that way it's
easily
recognizable what are they for in code. "Anonymous" attributes
seem to
me to be sort of like "you can throw ANYTHING in c++" feature
- it's
there, but probably without a sane use case.
Could you explain to me what's the benefit of the @attribute
convention
you introduce? It seems non-obvious to me.
It shows the intent of the type. D both have a keywords to
indicate an interface and an abstract class. In C++ interfaces
and abstract classes are possible as well, but there's no real
way to tell that a given class is actually supposed to be used
as an interface.
I was kind of disappointed with the way D implemented UDA's.
Just dump any value/type to a symbol.
Ok, i see the point now, thanks :). Maybe it'd be worth to
enforce that convention on a language level, let's say: only
types with @attribute can be used as UDA. One reason for making
that restriction is that when there's more than a one way of
doing something people will do that using all the ways possible.
This may be a problem to code which uses many libraries
simultanously - your utility functions will not interoperate with
UDAs made by someone else.
BTW I've just found one use case for anonymous UDA:
@(Enum.Entry) is verbose, the question is: "Is it useful enough
to keep it, or maybe having single convention is better?"
Certainly, there's no need to have arbitrary types in attributes
like
@UnawareClass because you can do @TakeUnaware!(UnawareClass)
instead.
The other way around would be to operate on
@SerializationAttribute specific to the lib so you can fetch only
the attributes you're interested in easily.