I think a clearer syntax here would be for n in 1...2 { }
as it casts no shadow of doubt about how many times the loop will be executed. > On 10 May 2016, at 9:27 pm, Tyler Cloutier via swift-evolution > <swift-evolution@swift.org> wrote: > > What would repeat 1 { } mean then? Repeat N? Would it run N or N + 1 times? > > That sounds a massive source of bugs. > > >> On May 10, 2016, at 5:25 PM, Xiaodi Wu <xiaodi...@gmail.com> wrote: >> >> FWIW, repeat once means do twice. >> On Tue, May 10, 2016 at 19:16 Tyler Cloutier <cloutierty...@aol.com> wrote: >>>> On May 10, 2016, at 4:07 PM, Xiaodi Wu <xiaodi...@gmail.com> wrote: >>>> >>>> >>>> >>>> On Tue, May 10, 2016 at 6:02 PM, Tyler Cloutier <cloutierty...@aol.com> >>>> wrote: >>>>> >>>>>> On May 10, 2016, at 3:59 PM, Xiaodi Wu <xiaodi...@gmail.com> wrote: >>>>>> >>>>>>> On Tue, May 10, 2016 at 5:56 PM, Tyler Cloutier <cloutierty...@aol.com> >>>>>>> wrote: >>>>>>> >>>>>>>> On May 10, 2016, at 3:13 PM, Xiaodi Wu <xiaodi...@gmail.com> wrote: >>>>>>>> >>>>>>>>> On Tue, May 10, 2016 at 3:30 PM, Tyler Cloutier via swift-evolution >>>>>>>>> <swift-evolution@swift.org> wrote: >>>>>>>>> I’d actually say that I’m strongly in favor of allowing just a repeat >>>>>>>>> keyword, although I wouldn’t support making 'while true’. >>>>>>>>> >>>>>>>>> Firstly it reduces clutter >>>>>>>> >>>>>>>> Can you explain what clutter you see? Unless I misunderstand what >>>>>>>> you're referring to, reducing the 10 letters in `while true` to the >>>>>>>> six letters in `repeat` is hardly "reducing clutter." >>>>>>>> >>>>>>>>> and makes it very clear that the the code is just supposed to repeat. >>>>>>>> >>>>>>>> I disagree here also. It is not very clear at all that the code is >>>>>>>> supposed to repeat indefinitely, not to any audience. >>>>>>>> >>>>>>>> First, it would not be clear to users who are experienced in Swift and >>>>>>>> aware of this proposal. Code is meant to be read, and allowing the >>>>>>>> omission of a trailing clause to produce two very different behaviors >>>>>>>> means that it is not clear what `repeat {` means until you encounter >>>>>>>> the closing brace and check for what follows. Moreover, what follows >>>>>>>> could be the keyword `while` on the following line, and in that case >>>>>>>> you cannot know whether the expression that follows `while` is the >>>>>>>> beginning of a new while loop until you encounter or don't encounter a >>>>>>>> new opening brace. By contrast, `while true {` cannot be anything >>>>>>>> other than the beginning of an infinite loop. You already know that >>>>>>>> fact after reading 12 letters. >>>>>>>> >>>>>>>> Second, it would not be clear to users migrating from another C-family >>>>>>>> language. `while true { }` is immediately understood by users of any >>>>>>>> other related language. >>>>>>>> >>>>>>>> Third, it would not be clear based on a knowledge of English. In >>>>>>>> common use, "repeat" does not mean repeat forever; it means to repeat >>>>>>>> once (i.e. do something twice). If I ask you to repeat something you >>>>>>>> just said, I should hope that you do not keep reciting it over and >>>>>>>> over until I tell you to stop. >>>>>>>> >>>>>>>>> Secondly it’s a very simple way of introducing new programmers to >>>>>>>>> loops. It’s IMHO more clear to a new programmer that repeat will just >>>>>>>>> repeat indefinitely vs while true. >>>>>>>> >>>>>>>> I can speak to this a little bit, having introduced a new programmer >>>>>>>> to loops very recently and having done so in the past as well. I have >>>>>>>> not encountered anyone who has trouble with the *concept* of >>>>>>>> looping--i.e. the idea that the same code can be run over and over. >>>>>>>> >>>>>>>> Where things get tricky is the difficulty of mastering the syntax of >>>>>>>> the while loop and, more problematic, the syntax of the classic for;; >>>>>>>> loop. Introducing a simple way to make something repeat forever does >>>>>>>> not solve this learning hurdle, because students will continue to have >>>>>>>> to contend with these other types of loops in order to be productive >>>>>>>> in the language. A special syntax for repeating forever is especially >>>>>>>> unhelpful because it is just functional enough that a discouraged >>>>>>>> student may choose to avoid learning other types of loops and instead >>>>>>>> combine the infinite loop with if, continue, and break. >>>>>>> >>>>>>> I’d also like to point out Chris’ comments on the >>>>>>> >>>>>>> repeat X { >>>>>>> >>>>>>> } >>>>>>> >>>>>>> discussion. >>>>>>> >>>>>>> “ >>>>>>> This is a very valid use case. >>>>>>> >>>>>>> FWIW, “repeat N {}” was originally designed and scoped into the Swift 2 >>>>>>> implementation of the feature, but was cut due to schedule limitations. >>>>>>> There is precedent for this sort of feature in many teaching oriented >>>>>>> languages (e.g. Logo). >>>>>>> >>>>>>> I’d say that the pro’s and con’s of this are: >>>>>>> >>>>>>> + Makes a simple case very simple, particularly important in teaching. >>>>>>> + Even if you aren’t familiar with it, you can tell at first glance >>>>>>> what the behavior is. >>>>>>> - It is “just syntactic sugar”, which makes the language more complex. >>>>>>> - It is a very narrow feature that is useful in few practical >>>>>>> situations. >>>>>>> >>>>>>> -Chris >>>>>>> “ >>>>>>> >>>>>>> In this case, I would say it’s not making the language any more complex >>>>>>> given that repeat-while is a current construct. Admittedly it is a very >>>>>>> narrow feature, but it’s also a small one. >>>>>> >>>>>> For the reasons I outlined above, I'd be +1 for `repeat N` and -1 for >>>>>> this case. >>>>> >>>>> That’s fair enough. :) >>>>> >>>>> But surely you’ll admit that if >>>>> >>>>> repeat N { >>>>> >>>>> } >>>>> >>>>> was valid, then repeat { } follows as the logical repeat indefinitely >>>>> syntax, no? >>>> >>>> No! Not at all! As I wrote above, it could mean repeat once. It currently >>>> means repeat until the condition that follows, and if that condition is >>>> optional you only find out after you read everything in the loop. So, IMO, >>>> it does not follow at all! >>> >>> Let’s talk about this. >>> >>> Could it mean repeat once? No, it hasn’t been run yet. In fact, there is >>> very clear syntax for exactly this: do { }. It means do this once. >>> Currently, repeat-while means that you repeat while the condition is true. >>> Thus if you leave off the condition it can only mean repeat this >>> unconditionally. I really don’t think that this a huge logical leap, and I >>> doubt very much that someone would be confused by it’s meaning. >>> >>> We will have to disagree here. I just see how adding a feature like repeat >>> N, which increases complexity, would be better than extending the repeat >>> syntax to allow you to repeat unconditionally. >>> >>> I’m +1 on this proposal (sans disallowing while true). >>> >>> Tyler >>> >>> >>>>> >>>>> >>>>>> >>>>>>> >>>>>>>> >>>>>>>>> Lastly, this isn’t the first time this has been brought up on this >>>>>>>>> list and there was previously discussion about the fact that when >>>>>>>>> people see the repeat keyword that it should naturally repeat >>>>>>>>> indefinitely unless a where clause is specified. >>>>>>>> >>>>>>>> I do believe that this is the first time this suggestion has been >>>>>>>> introduced to the list. I do not recall any previous discussion >>>>>>>> focused on infinite loops; they have been about repeating a finite >>>>>>>> number of times, using proposed syntax such as `repeat 3 times { }` or >>>>>>>> variations on that theme. >>>>>>>> >>>>>>>>> I also think the concern that an accidental infinite loop is any >>>>>>>>> greater than it is currently. >>>>>>>> >>>>>>>> Code gets refactored and edited. We're discussing on another thread >>>>>>>> changing the rules about dangling commas in parameter lists for that >>>>>>>> very reason. If you try to move a block of code with a repeat...while >>>>>>>> loop but accidentally leave behind the last line, this syntax will >>>>>>>> cause you grief. >>>>>>>> >>>>>>>>> Tyler >>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>>> On May 10, 2016, at 1:09 PM, Erica Sadun via swift-evolution >>>>>>>>>> <swift-evolution@swift.org> wrote: >>>>>>>>>> >>>>>>>>>> I do not see sufficiently measurable benefits to this proposal to >>>>>>>>>> add it to the language. >>>>>>>>>> It's easy enough to roll your own `repeatForever` function with >>>>>>>>>> trailing closure. >>>>>>>>>> >>>>>>>>>> I also want to thank you for bring it up on-list. Not every idea is >>>>>>>>>> right for Swift but it's >>>>>>>>>> always refreshing to see innovative thoughts added to the >>>>>>>>>> discussion. Please do not be >>>>>>>>>> discouraged by the generally negative feedback on this particular >>>>>>>>>> idea. >>>>>>>>>> >>>>>>>>>> -- Erica >>>>>>>>>> >>>>>>>>>>> On May 10, 2016, at 1:27 AM, Nicholas Maccharoli via >>>>>>>>>>> swift-evolution <swift-evolution@swift.org> wrote: >>>>>>>>>>> >>>>>>>>>>> Swift Evolution Community, >>>>>>>>>>> >>>>>>>>>>> Currently writing an infinite loop in swift looks either something >>>>>>>>>>> like this: >>>>>>>>>>> >>>>>>>>>>> while true { >>>>>>>>>>> if ... { break } >>>>>>>>>>> //... >>>>>>>>>>> } >>>>>>>>>>> >>>>>>>>>>> Or this: >>>>>>>>>>> >>>>>>>>>>> repeat { >>>>>>>>>>> if ... { break } >>>>>>>>>>> //... >>>>>>>>>>> } while true >>>>>>>>>>> >>>>>>>>>>> But I think it might be best to change the syntax / behaviour of >>>>>>>>>>> `repeat` to loop >>>>>>>>>>> indefinitely if no trailing while clause is present: >>>>>>>>>>> >>>>>>>>>>> repeat { >>>>>>>>>>> if ... { break } >>>>>>>>>>> //... >>>>>>>>>>> } >>>>>>>>>>> >>>>>>>>>>> while still allowing a trailing `while` clause as in: >>>>>>>>>>> >>>>>>>>>>> repeat { >>>>>>>>>>> foo += bar >>>>>>>>>>> } while foo.count < limit >>>>>>>>>>> >>>>>>>>>>> I also want to propose that it should be a compile time error to >>>>>>>>>>> use single `Bool` constants as while loop conditions, so no more >>>>>>>>>>> `while true { ... }` it would become `repeat { ... }` >>>>>>>>>>> >>>>>>>>>>> I was thinking of drafting a short proposal if there was enough >>>>>>>>>>> positive feedback. >>>>>>>>>>> >>>>>>>>>>> How does it sound? >>>>>>>>>>> >>>>>>>>>>> - Nick >>>>>>>>>>> _______________________________________________ >>>>>>>>>>> swift-evolution mailing list >>>>>>>>>>> swift-evolution@swift.org >>>>>>>>>>> https://lists.swift.org/mailman/listinfo/swift-evolution >>>>>>>>>> >>>>>>>>>> _______________________________________________ >>>>>>>>>> swift-evolution mailing list >>>>>>>>>> swift-evolution@swift.org >>>>>>>>>> https://lists.swift.org/mailman/listinfo/swift-evolution >>>>>>>>> >>>>>>>>> >>>>>>>>> _______________________________________________ >>>>>>>>> swift-evolution mailing list >>>>>>>>> swift-evolution@swift.org >>>>>>>>> https://lists.swift.org/mailman/listinfo/swift-evolution > > _______________________________________________ > swift-evolution mailing list > swift-evolution@swift.org > https://lists.swift.org/mailman/listinfo/swift-evolution
_______________________________________________ swift-evolution mailing list swift-evolution@swift.org https://lists.swift.org/mailman/listinfo/swift-evolution