> On Apr 23, 2016, at 8:53 PM, Brent Royal-Gordon via swift-evolution 
> <[email protected]> wrote:
> 
> A few things…
> 
> First, something absent: I'm a little bit concerned by the act that there's 
> no means to convert between different concrete FloatingPoint types. Something 
> like the IntMax mechanism in Swift 2's IntegerType might be useful, though 
> there may be good reasons not to do that.

There are concrete conversions between all built in float types.  Those aren’t 
going away.  Are you saying that you want init(_ value: Float) etc to be 
protocol requirements?

>> public protocol FloatingPoint: Comparable, IntegerLiteralConvertible {
>> public protocol BinaryFloatingPoint: FloatingPoint, FloatLiteralConvertible {
> 
> Any reason why FloatLiteralConvertible isn't on FloatingPoint?

It doesn’t make sense for non-radix-2 types; you would change bases multiple 
times.

>>  prefix func +(x: Self) -> Self
> 
> Does this actually do anything, or is it a no-op? If the latter, should it 
> just be a free function rather than part of the protocol? Or maybe even part 
> of the literal syntax that can't be applied to variables at all?
> 
>>  static func minimum(x: Self, _ y: Self) -> Self
>>  static func maximum(x: Self, _ y: Self) -> Self
>>  static func minimumMagnitude(x: Self, _ y: Self) -> Self
>>  static func maximumMagnitude(x: Self, _ y: Self) -> Self
> 
> These all take two operands, but I can't think of a reason for that. Might 
> they be better off as variadic? (Or is the "implementation hook" comment 
> meant to indicate that the variadic form of the `max` free function will use 
> these calls?)

Correct, the free functions will use these.

>>  func isEqual(to other: Self) -> Bool
>>  func isLess(than other: Self) -> Bool
>>  func isLessThanOrEqual(to other: Self) -> Bool
> 
> I'm still not sure why these are methods instead of operators.
> 
> (I also share others' concern about the argument label on 
> `isLessThanOrEqual`.)

There’s lots of concern, and very few suggestions of anything better.  The only 
thing that seems workable is maybe `isLessThanOrEqualTo(_:)`, which is 
inconsistent with the other comparisons, but maybe that’s the right thing to do 
anyway.

>>  func isUnordered(with other: Self) -> Bool
>>  func isTotallyOrdered(with other: Self) -> Bool
> 
> I think these features should be folded into Comparable, but I'll start a 
> different thread about that. For the moment, these seem fine.
> 
>>  func isEqual<Other: BinaryFloatingPoint>(to other: Other) -> Bool
>>  func isLess<Other: BinaryFloatingPoint>(than other: Other) -> Bool
>>  func isLessThanOrEqual<Other: BinaryFloatingPoint>(to other: Other) -> Bool
>>  func isUnordered<Other: BinaryFloatingPoint>(with other: Other) -> Bool
>>  func isTotallyOrdered<Other: BinaryFloatingPoint>(with other: Other) -> Bool
> 
> Can you provide some color on these? Loosening the typing in this way is 
> quite unusual in Swift; you're not doing it for arithmetic operators, for 
> instance.

Heterogeneous comparisons have an unambiguous result type and correct result.  
Heterogeneous arithmetic does not (at least, not in all cases), so it’s a more 
difficult language design problem.

>>  init(nan payload: Self.RawSignificand, signaling: Bool)
> 
> The discussion doesn't mention why this isn't part of the protocol. Any 
> commentary? (I'm guessing it's "you need to know the type anyway to do 
> anything useful with the payload", but I'm not sure, and it's useful to 
> document the reasons for these sorts of decisions)

Yup, that’s exactly right.  I’ll add a note.

>>      * What is your evaluation of the proposal?
> 
> I think it's a huge improvement.
> 
>>      * Is the problem being addressed significant enough to warrant a change 
>> to Swift?
> 
> Yes. The current floating-point protocols are inadequate.
> 
>>      * Does this proposal fit well with the feel and direction of Swift?
> 
> Yes.
> 
>>      * If you have you used other languages or libraries with a similar 
>> feature, how do you feel that this proposal compares to those?
> 
> I don't have much experience with floating-point abstractions of this sort, 
> but as far as the end-user APIs are concerned, I really like these APIs.
> 
>>      * How much effort did you put into your review? A glance, a quick 
>> reading, or an in-depth study?
> 
> Participated in the previous round of discussion as well as this one.

Thanks for the feedback!
– Steve

_______________________________________________
swift-evolution mailing list
[email protected]
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to