> On Jun 8, 2016, at 11:06, Dave Abrahams via swift-evolution 
> <swift-evolution@swift.org> wrote:
> 
> 
> on Wed Jun 08 2016, Chris Lattner <clattner-AT-apple.com> wrote:
> 
>>> On Jun 8, 2016, at 7:52 AM, Brent Royal-Gordon <br...@architechies.com> 
>>> wrote:
>>> 
>>>> Is there a widely used comparison function that throws?
>>> 
>>> Any comparison function that examines external data related to the instance:
>>> 
>>> * Sorting filenames by the data in the corresponding files
>>> * Instances backed by a database where actually loading the data could fail
>>> * Etc.
>> 
>> Ok, instead of using rethrows, would it be a better overall design be
>> to define two overloads, one that takes a throwing closure and one
>> that doesn’t?  This allows the throw-supporting implementation to be
>> slower without punishing the normal case..
> 
> There is *no reason* to do this.
> 
> * Most sorting algorithms can be written so that even if the comparison
>  throws, no elements are lost
> 
> * Even if elements were lost—though it might indeed be surprising—it's
>  not actually a problem we should solve, especially not by penalizing
>  performance.  It's *very* unlikely that a partially scrambled
>  collection is of any use to the caller in real code.
> 
> * Giving commit-or-rollback semantics for every operation is not
>  something we should do by penalizing performance. Commit-or-rollback
>  does not compose, and therefore ends up uselessly penalizing
>  performance in compositions.

FWIW Dave gave me most of the same feedback in the discussion on the 
proof-of-concept pull request: 
https://github.com/apple/swift/pull/1527#discussion_r60811569 
<https://github.com/apple/swift/pull/1527#discussion_r60811569>

Jordan

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

Reply via email to