On Nov 2, 2017, at 7:22 PM, Xiaodi Wu via swift-dev <swift-dev@swift.org> wrote:

> On Thu, Nov 2, 2017 at 5:22 PM, Matthew Johnson <matt...@anandabits.com 
> <mailto:matt...@anandabits.com>> wrote:
> 
>> On Nov 2, 2017, at 5:20 PM, Jonathan Hull via swift-dev <swift-dev@swift.org 
>> <mailto:swift-dev@swift.org>> wrote:
>> 
>> It looks like we have a good solution.  Per Steve and David’s suggestions:
>> 
>> 1) Make FloatingPoint == reflexive
>> 
>> 2) Add &== to FloatingPoint for those who specifically want IEEE behavior
>> 
>> 3) Add a warning + fixit to ‘a != a’ 
>> 
>> We should take this to evolution…
> 
> Looks like a winner to me.
> 
> Again, there remain several problems with this design. In the concrete 
> context, the syntax `&==` suggests that it is a compatibility, legacy, or 
> specialized function not to be preferred over `==`. This makes Swift deviate 
> from every other programming language, creating a new footgun for experienced 
> developers, and encourages a performance hit where one is not demonstrably 
> necessary (most operations that ask about UI coordinates, say, will never 
> have NaN as an input).

This is a real concern, which I don’t think can be dismissed easily. It’s 
really the only major concern that I have, however.

> Again also, this design eliminates the possibility of writing a class of 
> useful algorithms that use Numeric. It also doesn't address the problem of 
> sorting (as NaN would still compare unordered to all other values). These are 
> serious questions that require careful consideration.

What algorithms do you have in mind? You want to detect and handle NaN for a 
generic algorithm written against Numeric context via x != x, I assume?

If we went down the road that I sketched out, I think we would (completely 
arbitrarily) order NaN after +Inf under Comparable. Anything else would be 
fairly inconsistent.

Broadly I agree that if we can find some other way to make things work, we 
should do it, but this also isn’t a *terrible* option.

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

Reply via email to