> On Jun 28, 2016, at 10:17 AM, Mark Lacey via swift-evolution 
> <swift-evolution@swift.org> wrote:
> 
> 
>> On Jun 28, 2016, at 7:55 AM, Sean Heber <s...@fifthace.com> wrote:
>> 
>>> On Jun 28, 2016, at 9:52 AM, Mark Lacey via swift-evolution 
>>> <swift-evolution@swift.org> wrote:
>>> 
>>>> 
>>>> On Jun 27, 2016, at 9:10 PM, L. Mihalkovic via swift-evolution 
>>>> <swift-evolution@swift.org> wrote:
>>>> 
>>>> -1 for the fact that if all devs can write working code, fewer can do it 
>>>> in a clear structured fashion that is well designed for extensibility.
>>> 
>>> This sounds more like an argument for having sealed classes than not. As 
>>> the proposal points out in the motivation, if the base class is not 
>>> designed with subclassing in mind then overriding methods can result in 
>>> unintended behavior (e.g. crashing, or other bugs).
>> 
>> But I think the counter argument is, what if you need to fix or workaround 
>> unintended behavior of the class you’re trying to use?
> 
> Sure, I understand that, and I don’t mean to trivialize that concern. I’m 
> just pointing out that “code…that is [not] well designed for extensibility”, 
> might not  work very well if you start using extension points that weren’t 
> well thought through.
> 
> If you are designing for extensibility you’ll be carefully thinking about 
> what should and should not be final both within and outside of your module. 
> Not doing so can result in bugs. This proposal introduces the ability to 
> allow extension within the module but restrict it outside the module, and 
> defaults to not allowing extension beyond the module.
> 
> You can argue both ways which default would be better, and I suspect people 
> who mostly write libraries might opt for sealed-by-default, and people who 
> mostly consume libraries might opt for open-by-default. My point is that 
> open-by-default isn’t “better” because it allows you to potentially work 
> around a problem in a base class, because by working around that problem by 
> overriding a method that wasn’t designed to be overridden you don’t know how 
> many other new problems you might be introducing (now or in the future if the 
> implementation of the base class changes).

I think a good argument for sealed by default is that if we introduce `sealed` 
responsible library authors will already be marking all classes not intended 
for external subclassing as either `sealed` or `final` anyway.   The intended 
(and hopefully actual) public  API will be identical regardless of the default. 
 Making it the default avoids a lot of boilerplate keywords and makes ensure 
the API contract is stated more explicitly.

The only case where the default should make a difference is when a library is 
written without consideration of subclasses.  As you point out, in that case it 
is a really bad idea to attempt to work around a bug with a subclass.

> 
> Mark
> 
> _______________________________________________
> 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