Sent from my iPad

> On Mar 9, 2017, at 2:23 AM, Slava Pestov via swift-evolution 
> <[email protected]> wrote:
> 
> I think the fact that the type checker permits ‘final’ to appear inside 
> protocol extensions is an oversight and this probably does not even warrant a 
> proposal. I don’t think allowing this was ever part of the conceptual model 
> of protocol extensions at any point in time (if you recall they were 
> introduced ‘recently’, in Swift 2). If someone put together a PR which makes 
> ‘final’ in protocol extensions an error in Swift 4 mode (and a warning in 3), 
> I would merge it.
> 
> FWIW that there is one restriction around the direct dispatch here we want to 
> lift, but it’s not related to this proposal.
> 
> If you have a base class conforming to a protocol using default requirements, 
> eg
> 
>   protocol Proto { func f() }
>   extension Proto { func f() { } }
> 
>   class Base : Proto {}
> 
> Currently the witness table for Base : Proto directly references the 
> extension method Proto.f.
> 
> We want to allow this, at least inside the module:
> 
> class Derived {
>   override func f() {} // does not work currently
> }
> 
> This will mean that ‘Proto.f’ will appear in the vtable of ‘Base’, pointing 
> at the extension method. The conformance will dispatch through the vtable 
> instead of directly calling the extension method.

Would this allow the override to call `Proto.f` through super?

> 
> Slava
> 
>> On Mar 7, 2017, at 7:23 PM, Brian King via swift-evolution 
>> <[email protected]> wrote:
>> 
>> Hey Folks, This draft proposal addresses starter bug SR-1762. I believe this 
>> is in scope for Swift 4 since it impacts source compatibility. It's not a 
>> very exciting proposal, but I think it will help make Swift a little more 
>> consistent.
>> 
>> https://gist.github.com/KingOfBrian/6f20c566114ac0ef54c8092d80e54ee7
>> https://bugs.swift.org/browse/SR-1762
>> 
>> Thanks
>> 
>> Brian
>> Introduction
>> 
>> This proposal suggests removing support for the final keyword when declaring 
>> a function in a protocol extension. The presence of the final keyword does 
>> not currently generate an error message, and it does not actually modify the 
>> dispatch behavior in any way.
>> 
>> 
>> Motivation
>> 
>> In the original protocol model of Swift, a developer could use the final 
>> keyword when declaring a function in a protocol extension to ensure the 
>> function could not be overridden. This keyword has no use in Swift's current 
>> protocol model, since functions in protocol extensions can not be overridden 
>> and will always use direct dispatch.
>> 
>> 
>> Detailed design
>> 
>> The compiler should generate an error or warning when the final keyword is 
>> used on a function declaration inside of a protocol extension. This is 
>> consistent with the use of final in structs and enumerations.
>> 
>> 
>> Source compatibility
>> 
>> This change will impact source compatibility. To maintain compatibility with 
>> Swift 3, a warning will be generated in Swift 3 mode instead of an error 
>> message.
>> 
>> 
>> Effect on ABI stability
>> 
>> This has no effect on ABI stability
>> 
>> 
>> Effect on API resilience
>> 
>> This has no effect on API resilience
>> 
>> 
>> Alternatives considered
>> 
>> The only alternative would be to not fix this bug
>> 
>> _______________________________________________
>> swift-evolution mailing list
>> [email protected]
>> https://lists.swift.org/mailman/listinfo/swift-evolution
> 
> _______________________________________________
> swift-evolution mailing list
> [email protected]
> https://lists.swift.org/mailman/listinfo/swift-evolution
_______________________________________________
swift-evolution mailing list
[email protected]
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to