[swift-evolution] for-else syntax

Jordan Rose jordan_rose at apple.com
Mon Feb 6 12:06:19 CST 2017


> On Feb 6, 2017, at 02:50, Jeremy Pereira via swift-evolution <swift-evolution at swift.org> wrote:
> 
> 
>> On 3 Feb 2017, at 18:00, Dave Abrahams via swift-evolution <swift-evolution at swift.org> wrote:
>> 
>> 
>> on Fri Feb 03 2017, Dimitri Racordon <swift-evolution at swift.org> wrote:
>> 
>>> Talking of Python, Swift is not Python and the argument not to
>>> implement a feature because its semantics conflict with the semantics
>>> of a similar looking feature in another language is bogus. 
>> 
>> I don't have a anything to say about for-else, but just a comment on the
>> meta-point of how we evaluate designs: precedent set by other languages
>> affects learnability, and is one of the criteria we've always considered
>> when designing Swift.
>> 
> 
> Two things:
> 
> 1. Somehow the quoting in your email has got messed up so it looks like a statement I made was made by somebody else who may or may not agree with the sentiment expressed.
> 
> 2. You’ve never been shy of going against precedent if you consider it to be a *bad* precedent. Otherwise Swift would still have C style for loops and pre/post increment/decrement operators. That is as it should be. The Python for … else statement is a mess. My brief survey of the Internet suggests it is confusing even to some Python programmers. It should not be allowed to prevent the Swift team from implementing similarly named but better designed features if there are other good reasons for doing so.

This is not at odds with what you’re saying, but I wanted to add that there’s a difference between removing syntax and having conflicting syntax. That is, not having a for-else loop is fine, but having a for-else loop that behaves differently than Python’s would require a pretty strong reason. As far as I know there’s only one place where we deliberately chose to conflict with another language’s precedent, and that’s '…' being an inclusive range (where it is the exclusive range operator in Ruby), and that discussion led to us picking '..<‘ instead of ‘..’ for the other operator.

Jordan

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-evolution/attachments/20170206/cc8fb35a/attachment.html>


More information about the swift-evolution mailing list