> On 7 Apr 2016, at 18:54, Dmitri Gribenko via swift-evolution
> <swift-evolution@swift.org> wrote:
>
> On Thu, Apr 7, 2016 at 12:20 AM, Vladimir.S via swift-evolution
> <swift-evolution@swift.org> wrote:
>> But. .successor() .predecessor() methods for Int values do not follow these
>> rules for overflow situations. I.e. :
>> let i : Int8 = Int8.max
>> let k : Int8 = i.successor()
>> - is OK for current Swift compiler. We have i==127 and k==-128, no run-time
>> error.
>
> This was done for performance reasons. Array's indices are Ints, and
> adding an overflow check here was causing significant performance
> issues when iterating over arrays.
Sorry to bump this after it’s been idle for a little while, but I was thinking
about this again recently and I can’t come up with a test that verifies a
meaningful performance difference. I just threw the following into a playground:
import Foundation
do {
let startTime = NSDate().timeIntervalSince1970
var i = 0
while i < 1000000 { i = i &+ 1 }
let elapsed = NSDate().timeIntervalSince1970 - startTime
}
do {
let startTime = NSDate().timeIntervalSince1970
var i = 0
while i < 1000000 { i = i + 1 }
let elapsed = NSDate().timeIntervalSince1970 - startTime
}
My results come out with no discernible performance difference; I suspect that
this a side-effect of the iteration and storing overhead, but it seems to me
that this is the kind of minimum boilerplate you are going to have anyway if
you’re using .successor(). I know the issue is specifically with array
iteration, but I don’t believe I actually need an array involved to demonstrate
this, in fact the extra overhead would make the difference even less noticeable.
Is there a test that can demonstrate a more extreme difference? Even so, if the
issue is with array iteration then it seems that the best place to fix that is
in the array’s generator, rather than using the more generic IndexingGenerator
that has no awareness of the underlying index type.
_______________________________________________
swift-evolution mailing list
swift-evolution@swift.org
https://lists.swift.org/mailman/listinfo/swift-evolution