DIP6: Attributes

Ary Borenszweig ary at esperanto.org.ar
Tue Aug 4 12:56:16 PDT 2009


Andrei Alexandrescu wrote:
> Ary Borenszweig wrote:
>> Andrei Alexandrescu wrote:
>>> Steven Schveighoffer wrote:
>>>> On Tue, 04 Aug 2009 12:23:41 -0400, Andrei Alexandrescu 
>>>> <SeeWebsiteForEmail at erdani.org> wrote:
>>>>
>>>>> Steven Schveighoffer wrote:
>>>>>> On Tue, 04 Aug 2009 09:45:51 -0400, grauzone <none at example.net> 
>>>>>> wrote:
>>>>>>
>>>>>>> Steven Schveighoffer wrote:
>>>>>>>> don't think it's worth adding them until we can have full 
>>>>>>>> reflection capabilities so we can get at elements of code and 
>>>>>>>> therefore get the annotations associated with it.  I see much 
>>>>>>>> more usefulness for annotations as reflection hints than as a 
>>>>>>>> replacement for keywords.
>>>>>>>
>>>>>>> But we already have full reflection. It's called __traits. You 
>>>>>>> can build a serialization library or "proper" (user friendly?) 
>>>>>>> reflection on top of it.
>>>>>>  I think you are the 1 millionth person to say it, and yet we 
>>>>>> still do not have a "user friendly" reflection system.  Why is 
>>>>>> that?  You'd think that if it could be done, somebody would have 
>>>>>> done it by now.
>>>>>
>>>>> The reality is there's quite few of us. D is not in the stage where 
>>>>> if something could be done, somebody somewhere has done it or is 
>>>>> working on it.
>>>>>
>>>>
>>>> That's understandable, nobody can expect a language as young as D to 
>>>> have everything.
>>>>
>>>> But in reality, I think the *theory* that everything is there to 
>>>> build a reflection system is only proven when it actually happens.  
>>>> I'm sure when the enterprising person or persons go to develop it, 
>>>> they will find pieces missing from the static reflection system.
>>>
>>> Exactly. I'm absolutely sure there are quite a few things needed here 
>>> and there. I can assure you I'll push hard for those.
>>>
>>>> So my point is that adding annotations before reflection works and 
>>>> is implemented makes little sense to me, because the usage of them 
>>>> will be crippled by the fact that reflection isn't complete.
>>>>
>>>> What I'd like to see is something like this possible:
>>>>
>>>> void foo (int timeout, string bar, float f = 4.0);
>>>>
>>>> void foo(int timeout);
>>>>
>>>> call!(foo)("timeout=5,bar=\"hello\"");
>>>>
>>>> Taking into account the default value of f, what the parameters are 
>>>> named, and which overload to call.  I could certainly do it with C#.
>>>
>>> This is interesting. It means we'd need reflection for parameter 
>>> names, which currently does not exist.
>>
>> Why do it with strings? Why not
>>
>> call!(foo)(5, "hello")
>>
>> with varaidic args?
> 
> Well some don't like to need to remember the order of arguments.

But that's a way totally different thing discussed here.

First you need to introduce argument names when invoking a function.

void foo(int timeout, string bar) {
    ..
}

Can be used as:

foo(timeout=5, bar="100")

(with some other syntax, of course)

Once you have that, you could do:

call!(foo)(timeout=5, bar="100")

Voilà!



More information about the Digitalmars-d mailing list