Custom attributes (again)

Artur Skawina art.08.09 at gmail.com
Tue Apr 10 12:07:12 PDT 2012


On 04/10/12 12:32, Timon Gehr wrote:
> On 04/10/2012 12:18 AM, Walter Bright wrote:
>> On 4/6/2012 3:49 AM, Timon Gehr wrote:
>>> On 04/06/2012 12:23 PM, Walter Bright wrote:
>>>> On 4/6/2012 2:54 AM, Timon Gehr wrote:
>>>>> Should add additional information to the type Foo. I don't see any
>>>>> issues with
>>>>> it, and not supporting it would be very strange.
>>>>
>>>> How would:
>>>>
>>>> @attr(foo) int x;
>>>> int y;
>>>>
>>>> work? Are x and y the same type or not?
>>>
>>> Yes, they are.
>>>
>>> (But a future extension might leave this choice up to 'foo')
>>>
>>>> Now, consider:
>>>>
>>>> auto c = b ? x : y;
>>>>
>>>> What type does c have? int or @attr(foo)int ? And that's really just the
>>>> beginning. How about:
>>>>
>>>> struct S(T) {
>>>> T t;
>>>> }
>>>>
>>>> Instantiate it with S!int and S!(@attr(foo)int). Are those the same
>>>> instantiation, or different? If the same, does S.t have the attribute or
>>>> not?
>>>
>>> There is no such thing as an @attr(foo) int, because @attr is not a type
>>> constructor.
>>
>> But you said it was added to the *type*.
> 
> What I said was that it is added to the declaration. If the declaration happens to declare a type, then that must affect the type:
> 
> @attr(foo) struct Foo{} // annotate 'foo'
> 
> @attr(bar) Foo x;
> 
> __traits(getAttributes, typeof(x)); // this will find 'foo', but no 'bar'
> 
> __traits(getAttributes, x); // this will find 'bar', but not 'foo'

The last one is the one i'm not sure about. What's the advantage of not reporting
'foo' for 'x'? "Inheriting" the attrs from the type seems attractive, what does
separating the attributes achieve in practice?

I'm assuming the type attributes do not influence the type in any way.

While it would be great if one could also have type-changing attributes [1] in 
addition to the just annotating ones, i'm not going to propose that - there
were too many too complicated proposals in these threads already...

artur

[1] think "shared" etc, or multiple string types.


More information about the Digitalmars-d mailing list