> On Feb 25, 2017, at 1:43 PM, Matthew Johnson via swift-evolution 
> <[email protected]> wrote:
> 
> 
>> On Feb 25, 2017, at 3:27 PM, Kevin Nattinger via swift-evolution 
>> <[email protected] <mailto:[email protected]>> wrote:
>> 
>>> …
>>> Additionally, the design allows ‘final’ to take any one of those visibility 
>>> levels as a parameter, to indicate that the type should be treated as 
>>> ‘final’ at and above the specified scope. Thus ‘final(public)’ prevents 
>>> subclassing outside the module, while ‘final(internal)’ prevents it outside 
>>> the ‘private’ scope. For consistency, ‘final(private)’ is also permitted, 
>>> although it means the same thing as ‘final’ by itself.
>> 
>> I feel final(public) could be confusing given how we currently have 
>> private(get/set). What about public(final)? That’s at least consistent with 
>> current access syntax.
> 
> The syntax that most closely aligns with private(set) is internal(inherit).  
> The parameter expresses a capability not a limitation and it is used with an 
> access modifier that specifies the *maximum* access level that is allowed to 
> have this capability.  `final` is also misleading in this context because it 
> implies to most people that there are *no* subclasses (inside or outside the 
> module).  
> 
> The only way to express `final` in Swift’s access control system would to 
> have a `never` access modifier allowing you to say `never(inherit)`.  I can’ 
> think of any other uses for an access level like this.  `final` is much more 
> direct and is the term of art.  I don’t see a reason to change the spelling 
> of `final` and parameterizing it doesn’t make any sense - if something is 
> `final` it is `final` in *all* scopes.

hmm… ‘semifinal' for things that are closed outside the submodule?

Thanks,
Jon
_______________________________________________
swift-evolution mailing list
[email protected]
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to