On 06-04-2012 09:32, Walter Bright wrote:
On 4/6/2012 12:17 AM, Kapps wrote:
I like it for the most part. One thing I'd like to see is placing
multiple
attributes both by using multiple @attr()'s, and by using comma separated
identifier/expression pairs inside a single @attr. In other words, the
following
two declarations would be identical.
@attr(Description = "Blah", ReadOnly)
int ID;
@attr(Description = "Blah")
@attr(ReadOnly)
int ID;
Yes, that makes sense.
My only concerns:
First, @attr() is a little verbose / not exactly pretty. This isn't
really a big
issue, since attributes aren't exactly piled on and it makes it easy
to tell
what's going on. It is a little uglier than in other languages however.
Could do:
[[name = value]]
I suppose. Not sure what's better.
Secondly, from what I can tell it's an arbitrary key value combo. What
would
happen if you're working on a larger project and two unrelated
libraries try to
use the same attribute name to mean different things? With the module
system
this issue doesn't exist since you have to import it and can
selectively/privately do so, but from what I understand the method you're
proposing doesn't declare the attribute itself at all. Am I just
misunderstanding this part?
Good question. I don't have experience using attributes, so I don't know
if this would be a problem. Keep in mind that the attribute lookup will
only be done for a particular symbol, there won't be any global lookup.
It actually can be a problem. In .NET land, there are many attributes
across many projects (and even in the framework itself) with the same
names. It turns out that regular namespace lookup rules alleviate this
problem.
--
- Alex