[swift-evolution] [Pitch] separate syntax of class inheritance and protocol conformance

Sean Alling allings at icloud.com
Sun Jul 31 15:19:37 CDT 2016


I disagree with this suggestion.  Both a protocol conformance & class inheritance define behavior conformance.  If anything the protocol is more explicitly shown because the required properties and methods are conformed to within its declaration.

We used to define protocol conformance like so:  <myProtocol>
This was removed to make protocol-oriented programming a bit more powerful I’d suspect.  Also, it reads much easier in the current syntax.  

If we were to change it, I would suggest a keyword ‘conform’ because your suggested operators don’t make it explicit what behavior is being defined. Whereas, the current syntax behavior is simple and easily understood.

Sean




> I remember that this was discussed, but can't find any decision regarding
> this.. So, as a last chance, don't we want in Swift 3.0, as big source
> breaking change, separate class inheritance and protocol conformance in syntax?
> 
> Sorry if there was a decision about this suggestions. Please let know in
> this case.
> 
> I.e. when I see the following I can't understand if the class inherits from
> base class and conforms to protocols or just conforms to two protocols:
> 
> class MyClass : First, Second, Third {
> }
> 
> We don't have a rule to name protocols with 'Protocol'/other suffix/prefix,
> or classes with 'T'/'C' prefix or something like this, so I believe to
> improve the clarity of code we should separate in syntax inheritance and
> conformance.
> 
> As I understand we should discuss changes in these areas:
> 
> 1. class inheritance :
> class Child: BaseClass
> 
> 2. class conformance :
> class Child: SomeProtocol1, SomeProtocol2
> 
> 3. class inheritance + conformance :
> class Child: BaseClass, SomeProtocol1, SomeProtocol2
> 
> 4. protocol conformance for structs:
> struct Struct: SomeProtocol1, SomeProtocol2
> 
> 5. protocol inheritance:
> protocol Child: BaseProtocol1, BaseProtocol2
> 
> 
> My suggestions:
> 
> I) separate inheritance with double colon :
> 
> 1. class inheritance :
> class Child:: BaseClass
> 
> 2. class conformance :
> class Child: SomeProtocol1, SomeProtocol2
> 
> 3. class inheritance + conformance :
> class Child:: BaseClass : SomeProtocol1, SomeProtocol2
> 
> 4. protocol conformance for structs:
> struct Struct: SomeProtocol1, SomeProtocol2
> 
> 5. protocol inheritance:
> protocol Child:: BaseProtocol1, BaseProtocol2
> 
> 
> II) in class definition use parenthesis to separate inheritance and
> conformance :
> 
> 1. class inheritance :
> class Child: BaseClass
> 
> 2. class conformance :
> class Child: (SomeProtocol1, SomeProtocol2)
> 
> 3. class inheritance + conformance :
> class Child: BaseClass (SomeProtocol1, SomeProtocol2)
> 
> 4. protocol conformance for structs:
> struct Struct: SomeProtocol1, SomeProtocol2
> or
> struct Struct: (SomeProtocol1, SomeProtocol2)
> should be discussed
> 
> 5. protocol inheritance:
> protocol Child: BaseProtocol1, BaseProtocol2
> 
> 
> III) special word like 'conforms'
> 
> 1. class inheritance :
> class Child: BaseClass
> 
> 2. class conformance :
> class Child: conforms SomeProtocol1, SomeProtocol2
> or
> class Child conforms SomeProtocol1, SomeProtocol2
> 
> 3. class inheritance + conformance :
> class Child: BaseClass conforms SomeProtocol1, SomeProtocol2
> 
> 4. protocol conformance for structs:
> struct Struct: conforms SomeProtocol1, SomeProtocol2
> or
> struct Struct conforms SomeProtocol1, SomeProtocol2
> 
> 5. protocol inheritance:
> protocol Child: BaseProtocol1, BaseProtocol2
> 
> 
> Thoughts?
> 
> 
>  



More information about the swift-evolution mailing list