> On Apr 18, 2017, at 1:34 AM, Gwendal Roué <gwendal.r...@gmail.com> wrote:
> 
>> 
>> Le 18 avr. 2017 à 06:45, Joe Groff via swift-evolution 
>> <swift-evolution@swift.org> a écrit :
>> 
>>> 
>>> On Apr 17, 2017, at 9:40 PM, Chris Lattner <clatt...@nondot.org> wrote:
>>> 
>>> 
>>>> On Apr 17, 2017, at 9:07 AM, Joe Groff via swift-evolution 
>>>> <swift-evolution@swift.org> wrote:
>>>> 
>>>> 
>>>>> On Apr 15, 2017, at 9:49 PM, Xiaodi Wu via swift-evolution 
>>>>> <swift-evolution@swift.org> wrote:
>>>>> 
>>>>> For example, I expect `XCTAssertEqual<T : FloatingPoint>(_:_:)` to be 
>>>>> vended as part of XCTest, in order to make sure that 
>>>>> `XCTAssertEqual(resultOfComputation, Double.nan)` always fails.
>>>> 
>>>> Unit tests strike me as an example of where you really *don't* want level 
>>>> 1 comparison semantics. If I'm testing the output of an FP operation, I 
>>>> want to be able to test that it produces nan when I expect it to, or that 
>>>> it produces the right zero.
>>> 
>>> I find it very concerning that == will have different results based on 
>>> concrete vs generic type parameters.  This can only lead to significant 
>>> confusion down the road.  I’m highly concerned about situations where 
>>> taking a concrete algorithm and generalizing it (with generics) will change 
>>> its behavior.
>> 
>> In this case, I think we're making == do exactly what you want it to do 
>> based on context. If you're working concretely with floats, then you get 
>> floating-point behavior like you'd expect. If you're working with 
>> generically Equatable/Comparable things, then you're expecting the abstract 
>> guarantees of interchangeability and total ordering that implies, and you 
>> don't want to have to think about the edge cases of weird types that violate 
>> those constraints. I also doubt that this will cause problems in practice.
> 
> "then you're expecting the abstract guarantees of interchangeability and 
> total ordering that implies"
> 
> Joe, please: I'm very glad that you are expert in so many subject - I'd love 
> to have your job - but please keep track of average joes that have to scratch 
> their heads whenever they have to deal with nans and infinites and subnormals 
> and all those weird floating beasts. They already scratch their heads with 
> the idiosyncrasies of Swift protocols.
> 
> Please keep equality simple.

I would argue that keeping equality simple is exactly what this proposal 
achieves, since you *don't* need to worry about nans or positive/negative zero 
or other floating-point strangeness every place you use == abstractly. You have 
to opt in to the idiosyncratic behavior by working concretely with floats.

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

Reply via email to