<html><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class="">The review of&nbsp;<span class="" style="font-family: 'Helvetica Neue';">SE-0021 "Naming Functions with Argument Labels"</span>&nbsp;ran from January 13...18, 2016. The proposal has been&nbsp;<b class="">accepted</b><span class="">. We plan to introduce the new syntax in both 2.2 and 3.0, using Doug's implementation at&nbsp;<a href="https://github.com/DougGregor/swift/tree/se-0021-generalized-naming" class="">https://github.com/DougGregor/swift/tree/se-0021-generalized-naming</a>. Support for the proposal was overwhelmingly positive. A number of contributors proposed an alternative syntax, using a placeholder in the argument value position:</span><div class=""><span class=""><br class=""></span></div><blockquote style="margin: 0 0 0 40px; border: none; padding: 0px;" class=""><div class=""><span class="">let x = Foo.bar(_, bas: _)</span></div><div class=""><span class=""><br class=""></span></div></blockquote>with the idea that this could potentially generalize to partial application syntax. We don't think this is a good direction for Swift for a couple of reasons. Swift already has fairly compact syntax for forming closures over partially applied functions, { Foo.bar($0, bas: $1) }. It may not be everyone's aesthetic cup of tea, but this notation has several important advantages. The braces unambiguously delineate the boundaries of the closure, which is a subtle problem with Scala-like approaches. The braces also provide a visual cue that capture is occurring. The $n placeholders are also more general since they allow for reordering of arguments. '_' in particular is also a poor choice of placeholder, since in other contexts where it's used, it's meant as a "black hole" for value binding in patterns rather than as a placeholder for a meaningful bound value.<div class=""><br class=""></div><div class="">Another concern that was repeatedly raised was how to disambiguate overloads. We feel that contextual type disambiguation is sufficient for the use cases we envision. Cocoa's naming conventions already limit the amount of overloading that occurs in frameworks (though the Swift 3 renaming introduces more), and unapplied functions are generally used in contexts with adequate type context, such as parameters to higher-order functions. Introducing purpose-built syntax, such as interleaving types into the name like "Foo.(_: Int bar: String)", would increase the complexity and ambiguity of the feature for relatively little gain.</div><div class=""><br class=""></div><div class="">-Joe</div></body></html>