[swift-evolution] [Idea] Passing an Array to Variadic Functions
svabox at gmail.com
Thu Apr 21 02:22:37 CDT 2016
On 20.04.2016 23:27, Slava Pestov wrote:
>> On Apr 19, 2016, at 10:54 AM, Haravikk via swift-evolution
>> <swift-evolution at swift.org <mailto:swift-evolution at swift.org>> wrote:
>> * Possibly optimisations unavailable to Array passing?
> Indeed, it should be possible to implement varargs by allocating the
> argument array on the stack (and having the compiler implicitly copy it to
> the heap inside the callee if it escapes). Although you can imagine this
> type of optimization being performed for arbitrary arrays, it would be more
> difficult and less predictable.
But what about situations when we need to pass an array to function that
accepts only variadic params? Don't we need some #splat() function?
>> * Doesn’t do anything that passing an array directly can’t.
>> * Passing an array is actually slightly more flexible (can dynamically
>> pass more or less arguments as required at the call site).
>> * Less explicit type at call site; gives the appearance of passing
>> instance(s) of Foo, rather than one instance of [Foo], can lead to
>> ambiguity with overloaded functions.
>> * Extra syntax to support (enabling array passing would be more code
>> required to support this feature)
>> I’d also argue that variadic functions increase the learning curve, as
>> the first time you’re presented with one it isn’t necessarily clear what
>> it does unless you’ve encountered them before. Like I say it can be
>> ambiguous at the call-site in particular, as it doesn’t show that an
>> array of [Foo] is being passed as opposed to N instances of Foo (however
>> many are in the call).
>> While I’ve used them in the past, I’ve never really felt that they
>> simplify anything enough to justify them, as it’s just two square
>> brackets extra to pass an array; this is extra noise sure, but clarifies
>> what is actually happening.
>> So if variadic functions don’t have any other advantages, then it’s
>> really just a very minor piece of syntactic sugar that can lead to more
>> confusion, less explicit types in function calls, an extra piece of
>> syntax to parse and handle and possibly other features required to
>> support it better (like the one being inquired about). The only other
>> argument I can think of for them is that many other languages have them,
>> but that’s not important to me vs cutting out cruft.
>> Short version; removing variadic functions would solve the problem of
>> defining overloads for both variadic and array types by only ever
>> requiring the latter.
>> P.S- I’d also like to note that where possible people should be accepting
>> Sequences or Collections in their methods anyway rather than arrays
>> specifically, as it’s more flexible that way ;)
>> swift-evolution mailing list
>> swift-evolution at swift.org <mailto:swift-evolution at swift.org>
More information about the swift-evolution