[swift-evolution] Review for: Remove C-style for-loops with conditions and incrementers

Greg Parker gparker at apple.com
Wed Dec 9 01:04:34 CST 2015

> On Dec 7, 2015, at 5:29 PM, Kevin Ballard via swift-evolution <swift-evolution at swift.org> wrote:
> var i = initial
> while cond(i) {
>    defer { i = increment(i) }

Strange. Can the compiler optimizer handle that efficiently?

> Michel Fortin wrote:
> var i = 0
> var first = true
> while ({ () -> Bool in if first { first = false } else { i = increment(i) }; return cond(i) }()) {
> }

I fear that teaching the C-style for loop is easier than teaching that.

The C-style for loop has the great advantage that it can express a large number of loop constructs concisely. Most or all of the loop logic is collected in one place. It is also familiar to many developers via other languages.

1. Keep the C-style for loop.
2. Discourage use of the C-style for loop in simple cases with a compiler warning and fix-it to a for..in loop. This would be analogous to the existing warning of "variable was never mutated; consider changing to 'let' constant".

Greg Parker     gparker at apple.com     Runtime Wrangler

More information about the swift-evolution mailing list