[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.
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