> On Jul 2, 2016, at 10:58 AM, L. Mihalkovic <laurent.mihalko...@gmail.com> 
> wrote:
> 
> 
> Regards
> LM
> (From mobile)
> 
> On Jun 30, 2016, at 9:12 AM, John McCall <rjmcc...@apple.com 
> <mailto:rjmcc...@apple.com>> wrote:
> 
>>> On Jun 29, 2016, at 10:27 PM, L. Mihalkovic <laurent.mihalko...@gmail.com> 
>>> wrote:
>>> 
>>> On Jun 29, 2016, at 9:54 PM, John McCall via swift-evolution 
>>> <swift-evolution@swift.org> wrote:
>>> 
>>>>> On Jun 29, 2016, at 12:05 PM, Michael Peternell 
>>>>> <michael.petern...@gmx.at> wrote:
>>>>> I'm still unhappy about this "sealed by default" proposal. That really 
>>>>> looks like premature optimization to me. Instead there should be some 
>>>>> `sealed` keyword. Maybe it should be called `applepublic` :-p Everyone 
>>>>> will understand!
>>>>> 
>>>>> `sealed` classes should be a special optimization used by optimizing 
>>>>> developers who ask for it. Don't make it an unwanted and un-asked-for 
>>>>> default optimization. The people who care for optimization much will 
>>>>> learn about `sealed` and be able to apply the concept in both cases. The 
>>>>> people who don't care about performance will just be disappointed by the 
>>>>> "implicitly sealed" behavior. And with this proposal, when I read 
>>>>> `unsealed` I can never know: "did this developer intend me to be able to 
>>>>> subclass this class? or did he just not want to restrict me 
>>>>> unnecessarily?" The documenting aspect of `unsealed` is so small.
>>>>> 
>>>>> And `sealed` is just an optimization; IMHO the magic of static dispatch 
>>>>> lies in final classes or final methods. Sealing everything by default 
>>>>> just marks many classes and methods as implicitly final (because it can 
>>>>> be proven that they are not subclassed). I just don't think that all 
>>>>> these theoretical performance improvements are really worth the trouble 
>>>>> in practice.
>>>> 
>>>> I'm confused about why you think this is so much of a problem.  Do you 
>>>> really anticipate writing so many Swift libraries with public classes?
>>> 
>>> Look at some of the public libs on github for server side swift.. one 
>>> recently claimed 50 modules and counting... I think swift is missing a 
>>> level of containment below modules, and people are starting to make up for 
>>> it by creating a flury of (1class+1protocol) modules, especially now that 
>>> package manager makes it so trivial to create them. I think this is only 
>>> the begining... and nodejs is there to show how insane it could become:  
>>> remember the recent "trimleft" nightmare (1 module with 15 LOC including 
>>> brackets used pervasively that suddenly disapears).
>> 
>> I'm not arguing that there aren't going to be a lot of libraries.  We're all 
>> excited about the number of libraries.  Libraries are great.  
> 
> The issue is that according to this year's very interesting talk on perf is 
> that an app's startup time can get thrown over the limit by having to perform 
> too much relocation during dylib loading. I doubt too many will actually pay 
> attention (i just started a nodejs app a couple days ago and before it did 
> anything, bringing in angular and a few other dependencies downloaded 168M in 
> over 60 modules)

I'm referring to libraries as a tool for code organization.  Right now, some of 
the build tooling around Swift assumes that libraries have to be built as a 
separate dynamic library, and I agree that that's really unfortunate.

>> I'm trying to understand whether the objections here — which only matter on 
>> library boundaries — are motivated by any concrete experience writing such 
>> libraries in Swift.
>> 
>> Michael's argument was that sealed-by-default will be a major problem for 
>> those libraries and their users.  Let's suppose that there's a library with 
>> a public class, and it's sealed by default.  We can conclude that the author 
>> has never once tried to subclass this class outside of their library, 
>> because if they had, they would have gotten a compiler error.  Therefore, at 
>> best, if I hack the library to allow subclasses, I'm going to be doing 
>> something that has never once been tested and certainly was not considered 
>> when the class was written.  It's pretty clear that this is not the 
>> developer's intent.
> 
> I think that you r considering an already sophisticated developer to whom you 
> attribute the thought of 'whats it gonna be to use my code'. compared to the 
> real life i know. That said I spent some time thinking about your arguments 
> and I guess i can live with sealed (

Okay.  I think this has been a really productive conversation, and it's 
definitely made the proposal better, thank you.

John.

> 
>> Likewise, it's not true that "the documenting aspect of `unsealed` is so 
>> small".  Under sealed-by-default, the developer has to make a conscious, 
>> deliberate step to allow subclasses outside of their library.  They clearly 
>> do intend for you to be able to subclass this class.  It's actually the 
>> reverse situation where the user doesn't know how to interpret the code,
> 
> I believe most devs are not able to accurately predict what their code does 
> and will allow to do be done. Over the last 20 years i have usually seen the 
> most creative solutions being found despite what the original library writers 
> did, but it is just my personal exp. i would prefer a world without forking 
> dependencies, but... 
> 
> But i think you best argument is that idiomatic swift should not rely on 
> classes as much as other languages. So in the end, the applicability will 
> become more limited as we learn to write better swift over time. I think you 
> are right. :)
> 
>> because under unsealed-by-default, they can't know whether the class is 
>> really intended to be subclassed or whether they just forgot to add the 
>> restriction.
>> 
>> John.

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

Reply via email to