Sent from my iPad

> On Jul 5, 2016, at 8:53 PM, John McCall via swift-evolution 
> <swift-evolution@swift.org> wrote:
> 
> 
>>> On Jul 5, 2016, at 6:45 PM, Brent Royal-Gordon via swift-evolution 
>>> <swift-evolution@swift.org> wrote:
>>> 
>>>    * What is your evaluation of the proposal?
>> 
>> I think it's ultimately a good idea. Being noncommittal about 
>> subclassability/overridability—and thus forbidding it in public scope, but 
>> not making any promises about what the module does internally—is the 
>> alternative that preserves the most freedom for the module, and therefore 
>> the most appropriate default.
>> 
>> However, I don't like the `subclassable` and `overridable` keywords. They 
>> read like opposites of `final` with no implications for access level; I 
>> could easily imagine somebody marking an internal class `subclassable` 
>> assuming that it merely means it can be subclassed internally, and being 
>> very surprised (or even not noticing!) that the class has been made public. 
>> They're also long and cumbersome; that might be seen as a positive, but I 
>> think it will increase the inevitable backlash against this change.
>> 
>> I prefer the keyword `open`, which sounds like it could be a statement about 
>> the item's accessibility—and even sounds like it ought to be "more public 
>> than public"—and is short enough that it ought to be difficult to grumble 
>> about the change. It also means that both classes and members use the same 
>> keyword, and gives us a keyword that we can later use to "open" other things 
>> in the language, such as allowing you to extend enums with new cases.
> 
> Agreed; I also prefer "open" to having two different long keywords that don't 
> (at least to my ear) imply "public".

+1.  I agree that the keywords in the proposal don't feel like they imply 
public and do feel like they might be required even internally, a really 
unfortunate combination.

> 
>> I think Kevin Lundberg is right to worry about testability, but I don't 
>> think that has to prevent this change. Instead, we should permit `@testable` 
>> imports to subclass/override things that are not publicly 
>> subclassable/overridable, and thus a module built with "Enable Testability" 
>> on can't actually assume there are no subclasses/overrides of `internal` 
>> classes/members even if it doesn't see any. This will block optimizations in 
>> debug builds, but not in release builds. The proposal should be edited to 
>> explain this `@testable` behavior.
> 
> IIUC the basic design of @testable is to treat the tests for the testable 
> thing as existing within its module, so I think this just falls out.  I agree 
> that it should be spelled out in the proposal, though.
> 
> John.
> _______________________________________________
> swift-evolution mailing list
> swift-evolution@swift.org
> https://lists.swift.org/mailman/listinfo/swift-evolution

_______________________________________________
swift-evolution mailing list
swift-evolution@swift.org
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to