> On Jul 25, 2016, at 6:38 AM, Brent Royal-Gordon via swift-evolution 
> <swift-evolution@swift.org> wrote:
> 
>> On Jul 21, 2016, at 8:33 AM, Chris Lattner via swift-evolution 
>> <swift-evolution@swift.org> wrote:
>> 
>>      * What is your evaluation of the proposal?
> 
> Of the designs offered, I prefer #1, because:
> 
> 1. I'm not convinced that there's actually any sense in subclassing a class 
> with no open members; it seems to me that any class intended to be used like 
> this ought to be redesigned to use composition instead of subclassing.
> 
> 2. I also think that you're still effectively depending on implementation 
> details about the instance's lifecycle. Suppose I write a database library 
> which has a Record class. It supports uniquing—that is, a single database 
> record is never represented by two different Record instances. If the last 
> external reference to a Record disappears, does the library hold onto that 
> Record and return it again in response to another query, or does it 
> deallocate it and create a new one? That barely matters *unless* you've 
> subclassed Record.
> 
> 3. Even if there are no overrides, the class and the library around it 
> probably still need to be designed for subclassing. Take the Record example 
> from the previous point: the library will never use your subclass unless 
> there's some hook for telling it which subclass to use. Subclassing isn't 
> going to actually work right if the library doesn't expect any subclasses.
> 
> 4. Even leaving that aside, you may still foisting surprising memory 
> characteristics on the library. For instance, you might hang a large object 
> graph off an instance that's intended to be lightweight, or create a retain 
> cycle the library author took great pains to avoid.
> 
> 5. Finally, this doesn't help with the stated goal of allowing you to make a 
> class `final` in a later version of the library.
> 
> However, I'm actually strongly in favor of Garth Snyder's call for `open` to 
> explicitly become an access level. In design #1, it almost is already; making 
> it official would simplify many aspects of this design.
> 
> (If we do take that road, I would further suggest requiring protocols to be 
> marked `open` instead of `public`. I can easily imagine having closed 
> `public` protocols which are visible but can't be conformed to; this would 
> help with certain typing problems, such as `CKRecordValue`. On the other 
> hand, if `public` were conformable from outside, I can't think of a use for 
> marking a protocol `open`.

I am very much interested in introducing closed protocols.  This seems like an 
interesting and reasonable way to approach it.  I like that it makes the choice 
explicit across module boundaries with no real “default” to speak of - there is 
no additional “burden” (boilerplate) placed on either decision.

> 
> Protocol extension members should continue to be marked `public`. I could 
> imagine `open` being added later, meaning that the member should be added as 
> a protocol requirement so a specialized implementation can be provided; this 
> would avoid the current boilerplate for defaulted protocol members.)
> 
>>      * Is the problem being addressed significant enough to warrant a change 
>> to Swift?
> 
> Yes.
> 
>>      * Does this proposal fit well with the feel and direction of Swift?
> 
> Yes.
> 
>>      * If you have used other languages or libraries with a similar feature, 
>> how do you feel that this proposal compares to those?
> 
> N/A.
> 
>>      * How much effort did you put into your review? A glance, a quick 
>> reading, or an in-depth study?
> 
> I put a little bit less effort into this review than I did into the previous 
> two reviews, the many discussion threads on this topic, or several months of 
> thinking this over and changing my mind about the idea as the plan evolved.
> 
> -- 
> Brent Royal-Gordon
> Architechies
> 
> _______________________________________________
> 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