> On May 31, 2017, at 3:42 PM, Tony Parker <[email protected]> wrote:
>> On May 31, 2017, at 1:16 PM, John McCall via swift-evolution 
>> <[email protected] <mailto:[email protected]>> wrote:
>> 
>>> On May 30, 2017, at 7:41 AM, Nevin Brackett-Rozinsky via swift-evolution 
>>> <[email protected] <mailto:[email protected]>> wrote:
>>> On Mon, May 29, 2017 at 10:47 PM, Robert Bennett <[email protected] 
>>> <mailto:[email protected]>> wrote:
>>> I think the goal of SE 0110 and to a lesser extent 0066 was to disallow 
>>> this level of intelligence in the compiler.
>>> 
>>> Interesting.
>>> 
>>> I happen to think that the goal of SE–110 
>>> <https://github.com/apple/swift-evolution/blob/master/proposals/0110-distingish-single-tuple-arg.md>
>>>  was to make Swift's type system “properly distinguish between functions 
>>> that take one tuple argument, and functions that take multiple arguments.” 
>>> Nowhere does that proposal discuss tuple destructuring, and nowhere does it 
>>> discuss optional parentheses around closure parameter lists.
>>> 
>>> I might go so far as to say that any commits which *do* affect those 
>>> things, cannot possibly be correct implementations of the accepted proposal 
>>> SE–110, because SE–110 did not describe any changes there.
>>> 
>>> With SE–66 
>>> <https://github.com/apple/swift-evolution/blob/master/proposals/0066-standardize-function-type-syntax.md>
>>>  the case is even more clearcut: that proposal explicitly addresses the 
>>> question, “Should we require parentheses in closure expression parameter 
>>> lists?“ and answers it in the negative. The core team’s notes 
>>> <https://lists.swift.org/pipermail/swift-evolution-announce/2016-May/000138.html>
>>>  on accepting also specify, “The core team did not feel that this proposal 
>>> needed to include required parentheses within closures, which have their 
>>> own fairly specific grammar.”
>>> 
>>> 
>>> While technically feasible, it's not desirable to overload parentheses in 
>>> this manner.
>>> 
>>> I strongly disagree. Language features are desirable exactly to the extent 
>>> that they make life better for developers.
>>> 
>>> Moreover, parentheses are *already* optional in closure parameter lists. 
>>> Making them mandatory would be source-breaking for no benefit to 
>>> programmers. Plus having to write double-parentheses in “dict.map{ ((key, 
>>> value)) in … }” would be needlessly annoying.
>> 
>> This is basically my perspective.  There are language features where we've 
>> made an intentional decision to require the user to write things in a 
>> specific way.  Closure parameter lists are not one of them; we've already 
>> committed to using a very permissive and flexible grammar.  Perhaps that was 
>> a mistake, but it's a mistake we've made and cannot reasonably undo, 
>> notwithstanding the proposals that are basically "we should ban 
>> such-and-such style that, coincidentally, I happen not to use."  In the long 
>> term, I feel confident that we can deliver an implementation that resolves 
>> the multiple-parameter vs. tuple-decomposition ambiguity without making any 
>> significant compromises, but I'm not sure whether we can reasonably achieve 
>> that in 4.0.
>> 
>> John.
> 
> As far as I can tell, right now is the earliest possible opportunity for us 
> to get real feedback on the impact of this proposal.
> 
> Therefore, it seems unfortunate that the apparent response is that it is 
> already too late to fix the problem. Or, perhaps I am misunderstanding?

I am not trying to say that it is too late to fix the problem.  Some solutions 
might be off the table, but we need to investigate what we can do.

John.

> 
> - Tony
> 
>> 
>>> 
>>> In my view there have been far too many calls for making Swift “consistent” 
>>> in ways that actually make it less enjoyable to use. That is the opposite 
>>> of “Swifty”, and we should instead prioritize convenience for users above 
>>> rigid consistency of implementation.
>>> 
>>> In the case at hand, with Dictionary.map, the vast majority of the time the 
>>> user doesn’t actually care whether the closure takes two arguments or a 
>>> single 2-tuple argument. They just know that it takes a key and a value, 
>>> and they want to be able to write “dict.map{ (key, value) in … }”.
>>> 
>>> Sure, the closure *does* take a 2-tuple, and it does not take two 
>>> arguments, but the programmer *using* it shouldn’t have to bother about 
>>> that distinction most of the time. They just want to assign the key to one 
>>> identifier and the value to another. If they try to write “key, value” 
>>> without any parentheses the compiler will complain and they’ll add the 
>>> parens. But if the compiler demands a *second* set of parentheses, that 
>>> will just seem ridiculous.
>>> 
>>> Nevin
>>> _______________________________________________
>>> swift-evolution mailing list
>>> [email protected] <mailto:[email protected]>
>>> https://lists.swift.org/mailman/listinfo/swift-evolution 
>>> <https://lists.swift.org/mailman/listinfo/swift-evolution>
>> 
>> _______________________________________________
>> swift-evolution mailing list
>> [email protected] <mailto:[email protected]>
>> https://lists.swift.org/mailman/listinfo/swift-evolution 
>> <https://lists.swift.org/mailman/listinfo/swift-evolution>

_______________________________________________
swift-evolution mailing list
[email protected]
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to