> Le 9 juil. 2016 à 18:22, L. Mihalkovic via swift-evolution 
> <[email protected]> a écrit :
> 
> 
> Regards
> (From mobile)
> 
> On Jul 9, 2016, at 4:30 PM, Matthew Johnson via swift-evolution 
> <[email protected] <mailto:[email protected]>> wrote:
> 
>> 
>>> On Jul 9, 2016, at 8:39 AM, Andre <[email protected] 
>>> <mailto:[email protected]>> wrote:
>>> 
>>> Personally, Im not against sealed by default, but I think there are cases 
>>> where closed source libraries have certain cases where workarounds are 
>>> necessary, and just sealing by default will prevent those cases. 
>>> 
>>> One could say, "well just use an open source one, or change vendors" but 
>>> its not that easy in The Real World™ where we get certain SDKs shoved down 
>>> our throats by the suits… and while that may be a separate issue to the one 
>>> at hand, its still a problem that won’t resolve itself by simply locking 
>>> down things…
>>> 
>>> In my own case, Ive fought with NSBrowser / NSTreeController in the past 
>>> and the only way to resolve things was to subclass (and no, waiting 1 or 2 
>>> years for a fix is not acceptable if you already have a product in the 
>>> wild).
>>> 
>>> So I am reticent to support this proposal without an escape hatch for those 
>>> cases…
>> 
>> Are you concerned about closed-source vendor frameworks beyond Apple’s?  
>> Some things to consider:
>> 
>> 1. This proposal should not impact any existing libraries - nobody should be 
>> shipping closed-source binary libraries written in Swift yet.
>> 
>> 2. Apple’s frameworks will probably remain in Objective-C for some time to 
>> come.  If / when they are replaced with Swift frameworks the default will 
>> have little (if any) impact on the public API contract.  It is reasonable to 
>> expect that Apple will review the public contracts carefully and add any 
>> annotations necessary to achieve the desired semantics.
>> 
>> 3. In the future, if you depend on any 3rd party closed-source libraries 
>> written in Swift you will be able to ship an update to your app that 
>> contains an updated / fixed version of the library independent of the user 
>> upgrading their OS.
>> 
>> This leaves the scenario of a case where you depend on a 3rd party, 
>> closed-source library written in Swift and where you cannot get (or use) a 
>> fix from the vendor for some reason.  This is a legitimate concern, but IMO 
>> it is not large enough to outweigh all of the advantages of making sealed 
>> the default.  
>> 
>> There is no doubt that adopting sealed by default will place some pressure 
>> on the Swift ecosystem.  As others have noted, this pressure already exists 
>> in the form of value types, protocol-oriented designs, etc - the current 
>> proposal is a relatively modest increase in that pressure.   I believe the 
>> pressure will have a very positive impact over time (the eventual outcome 
>> remains to be seen of course).  
>> 
>> Swift library vendors will need to choose between opening their source, 
>> providing responsive support and bug fixes, explicitly providing the escape 
>> hatch you mention (by designing with open types) or getting a bad reputation 
>> among users.
> 
> There are IMO no advantages to sealing by default. If there were, I cannot 
> imagine how they can have so consistently eluded the designers and 
> maintainers of so many great OOD languages in the last 30 years. Does it mean 
> it is just a matter of time for the core team to take it the c++ 
> standardization committee to make sure C++ gets enhanced the same way?
> 

You can’t compare Swift to C++ here. C++ uses « final » method and static 
dispatch by default, so subclassing does not imply the same fragility than with 
a fully dynamic language.


>> 
>> -Matthew
>> 
>>> 
>>> Andre
>>> 
>>>> 2016/07/09 22:11、Shawn Erickson <[email protected] 
>>>> <mailto:[email protected]>> のメール:
>>>> 
>>>> What I don't get in the arguments against this capability is the fact that 
>>>> many constructs in Swift can't be subclassed. Are we going to prevent 
>>>> library developers from presenting those in the public API? Your ability 
>>>> to subclass things when not supported by the library developer is already 
>>>> going to be greatly reduced. Additionally you are going to miss 
>>>> potentially helpful optimization in side the model if the library 
>>>> developer can't prevent extras subclassing.
>>>> 
>>>> It seems perfectly reasonable to allow a lot of freedoms for a library 
>>>> developer when designing their code on their side of the library API and 
>>>> not force them to expose unwanted API just because of internal design 
>>>> desires. 
>>>> 
>>>> (I have myself have already struggled with having to leak what I consider 
>>>> internal details outside of modules we have developed internally, likely 
>>>> need to get around to outlining the additional issues I see)
>>>> 
>>>> In the end if the library isn't good and you don't like the API find one 
>>>> that works the way you need (or make one). I expect a fairly rich 
>>>> environment of libraries that will sort itself out over time.
>>>> 
>>>> -Shawn
>>>> On Sat, Jul 9, 2016 at 8:43 AM Andre via swift-evolution 
>>>> <[email protected] <mailto:[email protected]>> wrote:
>>>> Hi,
>>>> 
>>>> > However, you *do not* want any new subclasses added as you know that is 
>>>> > not likely to end well.
>>>> Im curious, what kind of real-world scenario would "not end well" cover?
>>>> 
>>>> I’m genuinely curious, since Im still on the fence about this, but am 
>>>> willing to be convinced… if sealed by default brings more positives than 
>>>> negatives…
>>>> 
>>>> Thanks in advance.
>>>> 
>>>> Andre
>>>> 
>>>> 
>>>> > 2016/07/09 21:36、Matthew Johnson via swift-evolution 
>>>> > <[email protected] <mailto:[email protected]>> のメール:
>>>> >
>>>> >
>>>> >
>>>> > Sent from my iPad
>>>> >
>>>> >> On Jul 9, 2016, at 3:48 AM, Goffredo Marocchi via swift-evolution 
>>>> >> <[email protected] <mailto:[email protected]>> wrote:
>>>> >>
>>>> >>
>>>> >> Sent from my iPhone
>>>> >>
>>>> >>> On 8 Jul 2016, at 15:09, Károly Lőrentey via swift-evolution 
>>>> >>> <[email protected] <mailto:[email protected]>> wrote:
>>>> >>>
>>>> >>> Even in Java, it is a bad idea to leave classes subclassable; but 
>>>> >>> having to remember to add final is a chore.
>>>> >>
>>>> >> I still think it is worth doing that chore. The fact of the matter is 
>>>> >> that Java did not and is not enforcing that default and how many widely 
>>>> >> used production languages you know that do enforce this by default 
>>>> >> instead of asking library authors to do this bit of work?
>>>> >
>>>> > People keep talking about just adding final.  This *is not* an 
>>>> > alternative.  We are not talking about preventing subclasses by default 
>>>> > (i.e. final by default).
>>>> >
>>>> > We are talking about preventing subclasses *in other modules* by default 
>>>> > (i.e. sealed by default).  The alternative would be to introduce a 
>>>> > sealed keyword (or similar).
>>>> >
>>>> > There are times when you *need* to use subclasses inside your module.  
>>>> > Some or all of them may not even be directly visible externally (class 
>>>> > clusters).  However, you *do not* want any new subclasses added as you 
>>>> > know that is not likely to end well.  This is why having sealed, not 
>>>> > just final, is important.
>>>> >
>>>> > By choosing sealed as a default rather than final, we are keeping the 
>>>> > "subclassable by default" status *within* modules.  This facilitates 
>>>> > experimentation and eliminates the need for application level code to 
>>>> > opt-in to subclassing while still making external API contracts explicit 
>>>> > and therefore hopefully more robust.  It is the default most in-line 
>>>> > with the values and goals of Swift.
>>>> >
>>>> > 'final' and 'sealed' are two very different things.  Let's please keep 
>>>> > this focused on what is actually being proposed.
>>>> >
>>>> >>
>>>> >> _______________________________________________
>>>> >> swift-evolution mailing list
>>>> >> [email protected] <mailto:[email protected]>
>>>> >> https://lists.swift.org/mailman/listinfo/swift-evolution 
>>>> >> <https://lists.swift.org/mailman/listinfo/swift-evolution>
>>>> >
>>>> > _______________________________________________
>>>> > swift-evolution mailing list
>>>> > [email protected] <mailto:[email protected]>
>>>> > https://lists.swift.org/mailman/listinfo/swift-evolution 
>>>> > <https://lists.swift.org/mailman/listinfo/swift-evolution>
>>>> 
>>>> _______________________________________________
>>>> swift-evolution mailing list
>>>> [email protected] <mailto:[email protected]>
>>>> https://lists.swift.org/mailman/listinfo/swift-evolution 
>>>> <https://lists.swift.org/mailman/listinfo/swift-evolution>
>>> 
>> 
>> _______________________________________________
>> swift-evolution mailing list
>> [email protected] <mailto:[email protected]>
>> https://lists.swift.org/mailman/listinfo/swift-evolution 
>> <https://lists.swift.org/mailman/listinfo/swift-evolution>
> _______________________________________________
> swift-evolution mailing list
> [email protected]
> https://lists.swift.org/mailman/listinfo/swift-evolution

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

Reply via email to