[swift-evolution] [Idea] Passing an Array to Variadic Functions

Jeremy Pereira jeremy.j.pereira at googlemail.com
Thu Apr 21 07:57:01 CDT 2016


> On 20 Apr 2016, at 13:10, Haravikk <swift-evolution at haravikk.me> wrote:
> 
> 
>> On 20 Apr 2016, at 11:44, Jeremy Pereira <jeremy.j.pereira at googlemail.com> wrote:
>>> Pros:
>>> 	• Slightly cleaner syntax at call-site.
>>> 	• Possibly optimisations unavailable to Array passing?
>> 
>> • Makes calling C and Objective-C functions with variadic parameters less confusing
>> • Will not break existing Swift code that uses variadic parameters
> 
> In both cases you just have to add square brackets to make it an array instead, which doesn’t seem more confusing to me since that’s actually what you’re doing anyway.

But you still have to do it and a call to (say) printf would look different to its C declaration. Each individual change may not be onerous but you advocating something that will cause an annoyance to a lot of people for a highly subjective gain.

> 
>> • Makes generalising some functions cleaner e.g. zip(a, b) could be generalised to any number of parameters as already mentioned, but if you instead used an array, we would end up with a massive thread about whether the original two parameter zip should be removed
> 
> Only if the two-parameter form isn’t implemented any differently;

Why would it be implemented differently?

>> My quick an uscientific survey of questions and answers relating to variadic parameters on StackOverflow yields no instances of people asking what does the`…` in `func foo(a: Int…)` do which suggests that the learning curve is actually fairly trivial. However their is a megaton of questions asking things like “why can’t I pass an array" and "how do I forward variadic arguments to another variadic function”.
> 
> The ellipsis syntax is straightforward enough, but I think the problem lies more with variadics that overload similar function signatures (like the zip() method) where it becomes less clear what you’re calling, and what’s happening in that call (even if the actual method is pretty much the same). Passing arguments on also couldn’t be simpler in the array form, as you simply pass the array into another function that can take one.

I’m not against the idea of an addition to the language that would create a mechanism to allow passing arrays to variadic functions. I’m simply against the idea of removing the existing feature. As far as I can see, the only arguments put forward are “it might be confusing” and “I don’t like it". I think the bar should be higher than that


More information about the swift-evolution mailing list