[swift-evolution] Proposal: Sealed protocols

Mehdi Amini mehdi.amini at apple.com
Thu Dec 3 17:13:02 CST 2015


> On Dec 3, 2015, at 3:09 PM, Douglas Gregor <dgregor at apple.com> wrote:
> 
> 
>> On Dec 3, 2015, at 2:59 PM, Felix Gabel <felix.gabel at me.com> wrote:
>> 
>> Hey everyone,
>> 
>> I hereby propose adding a ’sealed’ modifier for protocols to enable library developers to declare protocols that can be only conformed to in the scope of the library itself. This is similar to a ’sealed trait’ in Scala with the difference that it does not limit the protocol to be only applicable in the file it is declared in.
>> 
>> Example:
>> 
>> public sealed protocol FooType {
>>   // this protocol can be conformed to only in scope of the library itself
>>   // it can NOT be conformed to by any object declared outside the library
>> }
>> 
>> What do you think?
> 
> 
> Can you elaborate on why a Swift developer would want to distinguish between “public sealed” and “internal”?

I can foresee how a whole module optimization would be able to do better devirtualization in this case, knowing the full possible set of type of instance.

— 
Mehdi



More information about the swift-evolution mailing list