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

David Owens II david at owensd.io
Fri Dec 11 12:18:56 CST 2015

> On Dec 11, 2015, at 9:39 AM, Paul Cantrell <cantrell at pobox.com> wrote:
> Did you get 1000x performance differences in optimized code? Or even >2x?
> Is there any sign that the 1000x differences at -Onone are not solvable? We’ve speculated sufficiently already; I’d want to hear from the compiler developers on that question.
> One should not design a language around its current performance quirks, but certainly _should_ design it around any inherent performance limitations. “Inherent” is open question here.
> P

For optimized code, yes, I’ve seen greater than 2x. The example I’ve shown on this thread is nearly 2x.

Many of the performance issues I ran into had to do with ARC aggressively adding retain/release, especially in the context of array access. The optimizer then goes through and removes a bunch of those it determines are not necessary.

Abstractions aren’t performance quirks; they will _always_ introduce overhead, especially in debug builds. The hope is that the optimizer can be sufficiently magical to turn those abstractions into the equivalent fast code.

I completely agree that for many use cases, the performance overhead of for-in will not have a user measurable impact. I’m simply asking for a way to write the cstyle-loop when I need to without jumping through arbitrary hoops of converting the functionality into a while-loop, and not introducing subtle bugs that I need to validate.


More information about the swift-evolution mailing list