Hello Brent,

Thanks for pointing it out - obvious now!

Regards,
Will Stanton

> On Mar 19, 2016, at 6:43 PM, Brent Royal-Gordon via swift-dev 
> <swift-dev@swift.org> wrote:
> 
> Actually, the code samples I gave you *do* subtly depend on 
> underestimatedCount being an underestimate, because the initial fast loop 
> force-unwraps the element returned by `next`. If the count is an 
> overestimate, that force unwrap will fail. You can see it in my example:
> 
>                       // Load all the fast elements
>                       for _ in 0..<fastCount {
>                               let elem = generator.next()!
>                               
> _appendElementQuicklyBecauseWeAlreadyKnowWeHaveTheCapacity(elem)
>                       }
> 
> And in the actual standard library code:
> 
>         // Add elements up to the initial capacity without checking for 
> regrowth.
>         for _ in 0..<initialCapacity {
>           builder.addWithExistingCapacity(generator.next()!)
>         }
> 
> These and similar constructs could be turned into `if let`s, but that would 
> add a conditional branch which would make the loop slower, particularly in 
> -Ounchecked mode where safety checks are disabled. In that mode, the force 
> unwrap operator simply *assumes* the value is not `nil`, which makes this 
> code run as fast as possible—it pretty much can just copy or retain the 
> element, assign it into the next slot in the array, and increment the array's 
> count.

_______________________________________________
swift-dev mailing list
swift-dev@swift.org
https://lists.swift.org/mailman/listinfo/swift-dev

Reply via email to