Objective-D, reflective programming, dynamic typing
grauzone
none at example.net
Fri Apr 3 09:27:25 PDT 2009
Andrei Alexandrescu wrote:
> Tomas Lindquist Olsen wrote:
>> On Fri, Apr 3, 2009 at 5:20 PM, Andrei Alexandrescu
>> <SeeWebsiteForEmail at erdani.org> wrote:
>>> Jarrett Billingsley wrote:
>>>> On Fri, Apr 3, 2009 at 10:38 AM, Eljay <eljay at adobe.com> wrote:
>>>>
>>>>> Alas, I'm not sure how to pass the variadic arguments through to
>>>>> another
>>>>> variadic function, with this
>>>>> signature:
>>>>> void perform(...)
>>>> You can't. D's varargs suck.
>>> Of course you can. Where did that come from?
>>>
>>> void foo(T...)(T args) { bar(args); }
>>> void bar(T...)(T args) { foreach (a; args) writeln(a); }
>>>
>>> void main()
>>> {
>>> foo(3, 4.5);
>>> }
>>>
>>> prints:
>>>
>>> 3
>>> 4.5
>>>
>>>
>>> Andrei
>>>
>>
>> That's not a D vararg, it's a variadic template!
>
> Well I guess I'll take that as a compliment.
>
>> I've made proposals to allow this properly (without templates) before
>> so I'm not going to waste time on that again...
>
> I, too, believe it would be a waste of time, but probably for different
> reasons. Look at this:
>
> void fun(...)
> {
> ... use void* _argptr and TypeInfo[] _arguments ...
> }
>
> I'll ignore the fact that binding the arguments to magic, predefined
> names has the elegance of a fart interrupting a solemn moment. The
> larger problem is the type of _argptr.
That surprises me. Your string mixin callbacks (or whatever is the
correct name for this idiom) in std.algorithm also use magic, predefined
names like "a".
> No safety can be built into a function that traffics in void*, EVER. No
> matter what you do. A proverb goes "No matter how nicely you dress a
> mule, you'll still call it a mule." (It was s/mule/ass/g in Romanian,
> but ass is ambiguous in English.) So yes, it would be a waste of time to
> embellish a fundamentally deeply unsafe feature. A better use of time
> would be to improve its safe counterpart.
The void* is paired with a TypeInfo. A Variant uses raw data and
TypeInfo, and manages to be reasonably safe. If you want guaranteed
safety, you must use something like Java (or SafeD vaporware).
> Andrei
More information about the Digitalmars-d
mailing list