[Issue 1839] New: Give D a modern varargs system that allows forwarding
Lars Ivar Igesund
larsivar at igesund.net
Fri Feb 15 10:04:34 PST 2008
Jarrett Billingsley wrote:
> <d-bugmail at puremagic.com> wrote in message
> news:bug-1839-3 at http.d.puremagic.com/issues/...
>> http://d.puremagic.com/issues/show_bug.cgi?id=1839
>>
>> Summary: Give D a modern varargs system that allows forwarding
>> Product: D
>> Version: 2.010
>> Platform: PC
>> OS/Version: Windows
>> Status: NEW
>> Severity: enhancement
>> Priority: P2
>> Component: DMD
>> AssignedTo: bugzilla at digitalmars.com
>> ReportedBy: wbaxter at gmail.com
>>
>>
>> Given function
>>
>> void A(...) {
>> ...
>> }
>>
>> It should be possible to write a function wrapsA of this sort:
>>
>> void wrapsA(...) {
>> pre_call();
>> A(...); // or whatever syntax you want for forwarding the varargs.
>> post_call();
>> }
>>
>> That D -- a supposedly modern, easy-to-use languages -- can't do this
>> conceptually simple thing is sad.
>>
>> The whole point of procedural programming is that code is encapsulated
>> into
>> reusable blocks. Not being able to forward varargs means that a big
>> chunk of
>> that reusability is lost any time you write a varargs function.
>>
>> The workaround is to write every varargs function in two flavors, one
>> thats got
>> (...) args, and one that's got (_argptr,_arguments) args. But if the
>> solution
>> is so mechanical and straightforward then why can't the compiler at just
>> do
>> that for us? I'm not saying that's the right way to implement vararg
>> forwarding, but barring a more elegant solution, that sounds like at
>> least a
>> plausible solution.
>
>
> I'll suggest it again: given a typesafe variadic function whose variadic
> parameter's array element type is a struct:
>
> void A(Variant[] args...)
>
> calling that function:
>
> A(1, 2, "hi")
>
> should be sugar for:
>
> A(Variant(1), Variant(2), Variant("hi"))
>
> This alone would obviate the need for ... style vararg functions. A
> Variant array is far, far more useful than the platform-dependent
> hard-to-use
> inflexible _arguments/_argptr crap. And at the same time, solves the "OMG
> template bloat!!" problem.
Only that that would move Variant into the runtime which is unfortunate.
More information about the Digitalmars-d-bugs
mailing list