[swift-evolution] Mark protocol methods with their protocol

Marinus van der Lugt rien at starbase55.com
Thu Sep 22 11:05:42 CDT 2016


That does not seem right to me. A does not implement any protocol.
The extension of A implements a protocol thus foo() should not be seen as part of the protocol at all.

So far, I have always extended a class when adding protocol compliance. I.e. it is always clear

I.e.

protocol P {
func foo()
}

class A {
 fun foo() {} // Should not be regarded as implementation of P
}

extension A: P {
 func foo() {} // This is the implementation of P
}

> 
> On 22 Sep 2016, at 11:28, Martin Waitz via swift-evolution <swift-evolution at swift.org> wrote:
> 
> Hi,
> 
> isn't it perfectly fine to conform to multiple unrelated protocols which both require the same member?
> Or to declare protocol conformance in some unrelated module?
> 
> Am 2016-09-22 07:15, schrieb Karl via swift-evolution:
>> I would like to make it a requirement if not inside a protocol
>> extension which declares a conformance, and actually build the
>> protocol name in to the member in an ABI-breaking way.
> 
> IMO, this is much too restrictive.
> When we force the protocol name into the member, we make it impossible to conform to multiple protocols.
> Well ok, we could create alias names for all protocols.
> But often you don't know which protocols to conform to when you compile your module!
> 
> What about:
> 
> -- module A --
> class A {
>   func foo() {}
> }
> 
> -- module B --
> protocol Foo {
>   func foo()
> }
> extension A: Foo {}
> 
> What is your ABI name for A.foo()?
> 
> Let's keep it simple!
> If a simple warning about unrelated methods in a protocol conformance extension solves 95% of our problem,
> then we shouldn't overengineer and throw away all our flexibility just to be 100% explicit about which protocol uses which members.
> 
> -- 
> Martin
> _______________________________________________
> swift-evolution mailing list
> swift-evolution at swift.org
> https://lists.swift.org/mailman/listinfo/swift-evolution



More information about the swift-evolution mailing list