The floating-point API design looks great. However, I'm concerned about 
providing a generic Arithmetic protocol:

> On Apr 14, 2016, at 4:55 PM, Stephen Canon via swift-evolution 
> <swift-evolution@swift.org> wrote:
> 
> A new protocol, Arithmetic, is introduced that provides the most basic 
> operations (add, subtract, multiply and divide) as well as Equatable and  
> IntegerLiteralConvertible, and is conformed to by both integer and floating- 
> point types.
> 
> There has been some resistance to adding such a protocol, owing to 
> differences in behavior between floating point and integer arithmetic. While 
> these differences make it difficult to write correct generic code that 
> operates on all "arithmetic" types, it is nonetheless convenient to provide a 
> single protocol that guarantees the availability of these basic operations. 
> It is intended that "number-like" types should provide these APIs.

There are many other things we could do because they're "convenient", but we 
don't because they're wrong or mislead users into design cul-de-sacs. For 
example, we could provide integer indexing into strings, which would certainly 
be convenient, but we don't do that because it would lead to misguided 
accidentally-quadratic algorithms all over the place. This feels like a similar 
accommodation—while convenient, it makes it too easy for users to write naive 
real-number-arithmetic code and apply it blindly to numeric representations 
with very different error and overflow behavior. By including "divides" in the 
protocol, you're also implying a common abstraction over two *completely 
different* operations—integer quotient and floating-point division don't share 
many properties other than unfortunately sharing an operator in C.

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

Reply via email to