[swift-evolution] [Draft][Proposal] Formalized Ordering
Dmitri Gribenko
gribozavr at gmail.com
Fri Jul 22 01:34:28 CDT 2016
On Thu, Jul 21, 2016 at 11:09 PM, Brent Royal-Gordon via
swift-evolution <swift-evolution at swift.org> wrote:
>> On Jul 21, 2016, at 6:11 PM, Robert Widmann via swift-evolution <swift-evolution at swift.org> wrote:
>>
>> Hello Swift Community,
>>
>> Harlan Haskins, Jaden Geller, and I have been working on a proposal to clean up the semantics of ordering relations in the standard library. We have a draft that you can get as a gist. Any feedback you might have about this proposal helps - though please keeps your comments on Swift-Evolution and not on the gist.
>
> My thoughts on this are not yet fully formed, but I have a couple questions concerning `isSame(_:_:)` and `==`:
>
> * Should calls like `index(of:)` and `split(separator:)` use `==` or `isSame(_:_:)`?
Use sites should always use `==`. They will pick up the semantics
appropriate for the generic constraints they see.
> * Should `Hashable` use `==` or `isSame(_:_:)`?
Code generic over Hashable will not see a difference.
> * Do we know of any use cases where a type conforms to `Equatable` but not `Comparable` and needs separate `isSame(_:_:)` and `==` operators?
No, but I can easily imagine that one exists.
> Essentially, I'm wondering if we can leave `Equatable`'s definition alone and only change `Comparable` to require `<=>`, with a generic operator to provide a default `==` which uses `<=>`.
We can't do that, because two values equal according to `<=>` should
be equal according to Equatable. Otherwise protocols don't make any
sense.
Dmitri
--
main(i,j){for(i=2;;i++){for(j=2;j<i;j++){if(!(i%j)){j=0;break;}}if
(j){printf("%d\n",i);}}} /*Dmitri Gribenko <gribozavr at gmail.com>*/
More information about the swift-evolution
mailing list