> On Sep 12, 2017, at 11:00 AM, Xiaodi Wu via swift-evolution 
> <swift-evolution@swift.org> wrote:
> 
> Suppose instead this were about a protocol named Fooable and a requirement 
> called foo() that has a default implementation. Everything you just talked 
> about would apply equally. Am I to understand that you are opposed to default 
> implementations in general? If so, then that’s got nothing to do with 
> synthesized Equatable conformance. If not, then you’ll have to justify why.

First - I can go either way on this issue, since proper traits/mixins and 
hygienic macros both appear to be strong influencers which will drive evolution 
in ways we cannot evaluate yet.

In my opinion, the difference between most protocol default implementations and 
Equatable/Hashable is that most protocol default implementations are based on 
the contract of the protocol itself. I can understand that Sequence#contains 
works by default because a Sequence implementation has a required 
makeIterator() function that meet the Sequence contract (and returns an 
Iterator that meets the iterator contract).

There is nothing in the Equatable contract saying "two instances of a type are 
considered Equatable for value types when all the properties on the type are 
Equatable and compare as being equal." That is a behavioral assumption made by 
the default implementation.

The current usage of traits in swift (in my experience) can be a bit deficient 
in that there is an assumption of a single behavior. For example - I might be 
able to default quite a bit of a view's delegate if I was willing to make 
assumptions, such as each row being a fixed size with a fixed (set of) views. 
But this is inappropriate as a default behavior for all table view delegates.

We also have the disadvantage that we haven't solved the problem of indicating 
a method is meant to implement a protocol, so typos and incorrect function 
signatures can result in the wrong behavior at runtime.

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

Reply via email to