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