[swift-evolution] [Proposal] Explicit Synthetic Behaviour

Vladimir.S svabox at gmail.com
Wed Sep 13 11:42:27 CDT 2017


On 13.09.2017 17:13, Haravikk via swift-evolution wrote:
>>
>> Well, certainly, synthesized default implementations differ from non-synthesized 
>> ones in key respects. However, they do not differ in terms of the user experience 
>> of conforming to the protocol and having to override the default.
> 
> Except that that's not true at all, is it?
> 
> Synthesised default implementations go much further in how they attempt (and 
> potentially fail) to implement those defaults, and in the specific case of 
> Equatable/Hashable they are fully implementing a protocol without a single property 
> of method being raised as a requirement; they are utterly different at a fundamental 
> level, no amount of mental contortion changes that fact.

FWIW Fully agree with Haravikk. Just want to add my 2 cents. We hear an opinion that 
protocol with auto-synthesization of requirements should be treated as a normal 
protocol with deault implenentation. So, this is just a variant of default 
implementation.

Actually I can agree with this. *BUT.* Such a *well-declared* protocol, which uses 
macros/reflection/other to access *type's fields* to implement the default methods 
IMO should also be explicitly conformed with 'deriving'-like keyword to be able to 
synthesize methods. For example, as first thoughts, such protocol should be marked 
with some kind of @synthesizable directive and probably have some helpers in this 
case from compiler to implement synthesizable defaults. Yes, one probably can 
implement protocol which uses macros/reflection without @synthesizable directive for 
protocol, but this should be considered as not-well-formed protocol.

Vladimir.


More information about the swift-evolution mailing list