> On May 23, 2016, at 6:53 AM, Douglas Gregor via swift-evolution 
> <swift-evolution@swift.org> wrote:
> 
> 
>> On May 18, 2016, at 12:28 AM, Vladimir.S via swift-evolution 
>> <swift-evolution@swift.org> wrote:
>> 
>> I'd like to discuss declaration of protocol implementation in types.
>> 
>> Ideas of this pitch is partially based on Erica Sadun's thread:
>> [Pitch] Requiring proactive overrides for default protocol implementations.
>> http://thread.gmane.org/gmane.comp.lang.swift.evolution/15496
>> And on this draft of proposal:
>> https://gist.github.com/erica/fc66e6f6335750d737e5512797e8284a
>> 
>> I had read "Winding down the Swift 3 release" message, but feel like this 
>> proposal makes "improvements to the consistency and feel of the language"
>> and supports the "goal of making Swift 4 as source compatible with Swift 3 
>> as we can reasonably accomplish". Or this can be discussed as 'after Swift 
>> 3.0' feature.
>> 
>> 
>> The main idea of my proposal
>> 
>> Swift should help us to be explicit about what methods were defined in type 
>> specifically to fulfill a protocol requirements. And so we will have more 
>> understandable and self-documented code that is explicit regarding the fact 
>> of protocol implementation(for reader of our code and for compiler).
>> 
>> Additionally this can help to reduce potential 
>> problems/error/misunderstanding in case some protocol requirement(method) 
>> were *removed* - in this case (currently) our type will still have a method 
>> as implementation but no such requirement in conformed protocol yet.
>> 
>> 
>> Details
>> 
>> I propose to introduce *implement* keyword to 'mark' the methods(in type) 
>> that were defined in order to conform to protocol.
> 
> I like this better than using the “override” or “required” keywprds.
> 
>> Also, *reimplement* keyword is proposed to reflect the fact that method is 
>> declared in *both* : in the type and in protocol extension (only in 
>> extension, no definition of the method in protocol itself)
> 
> I (personally) still don’t feel like the cases handled by “reimplement” are 
> important to distinguish from “implement”.
> 
> Without digging deeply into your rules, I’d like to reiterate my own 
> (personal!) perspective on why I don’t think we need a keyword here. With a 
> few exceptions, one can freely break up a type’s definition into a number of 
> different extensions. A fairly common style I’ve seen it to use a unique 
> extension for each protocol conformance, because it’s great for readability: 
> this is the functionality that is associated with a particular protocol 
> conformance. This style conveys essentially what the “implements” keyword 
> conveys: that the programmer intends to implement the protocol, but it does 
> so without any extra syntax. Moreover, if we assume that this is good style 
> and widely practiced, the compiler can use it as a cue: non-private 
> declarations that are within an extension that states conformance to P, that 
> are similar to some requirement in P but aren’t used to satisfy any require, 
> are suspicious and should produce a warning.
> 

Warning on non-private non-conformance yielding methods (helpers) is likely a 
good thing that would cleanly address some of the issues listed here:

https://lists.swift.org/pipermail/swift-evolution/Week-of-Mon-20160516/018560.html

Depending on where things go with protocols, you might still end-up having 
override creeping its nose, but it could simply be the result of applying 
current swift rules.


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

Reply via email to