[swift-evolution] [Draft] Rename Sequence.elementsEqual

Kevin Nattinger swift at nattinger.net
Tue Oct 17 12:41:12 CDT 2017


> On Oct 17, 2017, at 10:36 AM, Adam Kemp <adam_kemp at apple.com> wrote:
> 
> 
>> On Oct 17, 2017, at 10:00 AM, Kevin Nattinger <swift at nattinger.net <mailto:swift at nattinger.net>> wrote:
>> 
>> Once we allow covariant functions to satisfy protocol requirements and have generalized existentials and recursive protocol requirements, wouldn't we be able to update thusly:
>> 
>> protocol Unordered {
>> 	func map<T>(…) -> Any<U: Unordered where U.Element == T>
>> }
>> protocol Ordered: Unordered {
>> 	func map<T>(…) -> Any<O: Ordered where O.Element == T>
>> }
>> 
> 
> Now apply that to every order-preserving function that takes a Sequence and returns another Sequence. You’ve moved the burden from users of API to implementers of API. It reminds me of the const/non-const split that C++ developers have to deal with, where a lot of functions end up being implemented twice so that you can have a const version and a non-const version (generally one just calls the other). It’s a pain. I don’t want that when working with Sequences. I don’t think it’s worth it. And FWIW, when I was programming in C# I wrote functions that took an IEnumerable<T> and return another IEnumerable<T> very often. It’s a powerful feature that would have been ruined by a change like this.

The idea is that covariance would mean you only need to implement the function once.

> 
>> As I've been saying all along, elementsEqual returning a functionally random result when an unordered type is involved is a problem.
> 
> In theory. Where is the evidence that this leads to a significant number of real-world bugs? All you’ve done is describe a conceptual problem, but you haven’t connected the dots to real-world problems. Again, I can point to .Net, which has a much larger community of developers who have been working with the same “problem” since version 2.0 released in 2005. If this is a significant source of bugs then there should be evidence of that. Where is that evidence?

If there are no real-world problems, why do we feel the need to change the function name in the first place?

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-evolution/attachments/20171017/d3dbe5eb/attachment.html>


More information about the swift-evolution mailing list