Response inline

> On 10 May 2016, at 8:28 AM, Matthew Johnson <[email protected]> wrote:
> 
> 
>> On May 9, 2016, at 5:13 PM, Rod Brown via swift-evolution 
>> <[email protected]> wrote:
>> 
>> The problem then becomes how do we model such optimizations in Swift. 
>> Default methods, while useful for plenty of cases, don't work with this 
>> system as there is no runtime check to see if the object actually implements 
>> that method. The optimizations don't just check the existence for a default 
>> value - they actually lead to different code paths.
>> 
>> Can this be done? Absolutely. Either by segregating the protocols as you 
>> mentioned, or by adding some other way to cue the optimized sizing path. 
>> That said, it's certainly not as clean as the Objective-C design.
> 
> Clean is in the eye of the beholder.  I definitely don’t think the 
> Objective-C design feels right in Swift.  
> 
> There have been times where I implemented delegates where the row height 
> strategy was decided at initialization time.  In Objective-C I was able to do 
> this by implementing respondsToSelector.  That feels a bit dirty, but it 
> works.  In pure Swift there is no way to do that at all.  
> 
> Swift allows a delegate protocol design to take a position on whether the 
> initialization-time decision is supported or is a code smell that should be 
> disallowed.  The approach of segregated protocols disallows it.  Alternative 
> mechanisms such as a boolean getter allow for it.

I agree with this completely. By clean I was referring to the fact it's more 
concise, not that it's a good fit for the language. I don't think we should 
adopt this feature in Swift without seriously considering the implications 
because the nature of Swift's protocols is very different to that of Obj-C. I 
suspect there are better ways to model this behavior without breaking the 
philosophical underpinnings of Swift Protocols.

>> 
>> In general, I think default implementations fix a lot of the simpler cases 
>> surrounding optional methods and actually simplify other implementations (no 
>> runtime checks!). But they don't solve the real value proposition that the 
>> fully dynamic Objective-C design provided in this feature.
>> 
>> Do I support default implementations on protocols as a concept? Definitely. 
>> But I don't think we should kid ourselves that this solves anything apart 
>> from the simpler cases.
> 
> I agree with this.  I think we should study the more complex cases and 
> establish guidelines around idiomatic patterns for them in Swift.  This may 
> even result in proposals for language enhancements to support the idioms we 
> want to see in Swift.  But I’m glad to see “optional requirements” going away.
> 
> -Matthew

I don't think they're going away at this time, so much as we are clarifying 
what is already the case: they are an Obj-C only feature, and aren't supported 
in Swift standalone. They make sense and will continue to make sense in an 
Obj-C world, but they're not a foundational element of Swift.
_______________________________________________
swift-evolution mailing list
[email protected]
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to