I don't think this is the case. Even a in 300+ posts thread, a single argument, well constructed, logically solid and unchallenged by equally robust counterarguments, should be considered strong enough to shift a proposal in a certain direction. For purely syntactic sugar proposals like this one it's usually harder to construct arguments in favor of (or against) something without eventually using one's "personal preference" as key hypothesis.
But in this discussion it has been shown, with countless examples, arguments, framings, whatever, that there are cases, even right now, in the libraries that we use every day, where this proposal falls short hard, and these things were simply not taken into account by the accepted design: I'm fine with doing the minimum amount of useful work, in order to achieve a gradual evolution, but the proposal doesn't reach this minimum.
I didn't get this impression, I simply find some aspects of the rationale to be irrational. The only possible explanation I can think of is that making the label for the first closure optional would be a gigantic thing to develop: I'm not an expert, and if this is the reason why we're going with this demonstrably sub-par design, I really would like to know, and would have liked that it was put in the rationale. If it's not, if it's a simple addition, then the design is simply irrational.
I very strongly disagree with all three:
- it solves a very specific case of a class of problems - many of us have been annoyed with also other cases - and there's no reason to just focus on one while neglecting the others;
- true, but allowing for an optional label on the first closure, that would eventually been required, first with a warning, and then progressively with an error, would have been source compatible (for example, tuple binding in switch cases emits a warning right now); I understand the fact that, given that a complete redesign might be needed for trailing closures in general, it's not a good idea to require some specific syntax right now, but an optional first parameter label wouldn't have hurt, with an autocompletion behavior based on whether the latter has actually a value or it's
_:
; - I don't think it is; it's smaller than the smallest, Albert Einsten would have said that it's simpler than "as simple as possible". Parameter labels are swifty; dropping a label in a list of labeled parameters for no reason is not. Even the rationale clearly states that if we could redesign the trailing closure syntax, we would.
There's a simple case for a label to be dropped, and it's the same for other parameters: when it's _:
. That is swifty.
If an acceptance rationale has so many negative responses, such a negative feedback, there must be something wrong. The mental experiment would be to put all these in the amended review thread, and think if the outcome would have been the same. I suspect it would have been, due to the lack of responses from the authors (apart from the always patient John) in this thread. It's seems clear that the authors simply thought that, in case of "symmetric" APIs, one would expect that the non-trailing syntax is used, but this could have been so much better.
The proposal has a very, very poor justification for not allowing an optional label on the first parameter:
Recall: API authors should be naming functions assuming that the argument label of the first trailing closure will be dropped is literally something that the proposal just added: this is a circular argument.
Swift users aren’t used to seeing function names and argument labels juxtaposed without parenthesis, true, as they're not used to see the new syntax, but that doesn't mean we're not adding it. "Not used to" is not a good argument against new syntax, which is of course something people are not used to.
Many find this spelling unsettling., and a huge lot more find the design terrible for "symmetric" APIs.
Anyway, we'll somehow find some way to work with this, but it could have been hugely better with (seemingly) little effort.