> On Jul 10, 2016, at 6:42 PM, Jordan Rose via swift-evolution 
> <[email protected]> wrote:
> 
>>> 
>>>> 2016/07/09 23:30、Matthew Johnson <[email protected] 
>>>> <mailto:[email protected]>> のメール:
>>>> 
>>>> 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.  
>>> What are your thoughts on an ability for a way to force unseal a class that 
>>> does need to be fixed, even if its temporary?
>>> 
>>> Something like:
>>> 
>>> class MyFixedClass : @forceUnseal(SomeSealedClassThatNeedsFixing) { //Emits 
>>> a scary compiler warning
>>> }
>>> 
>>> Does that even seem feasible/possible, much less reasonable…?
>>> Though it would have to be a perhaps separate discussion, this comes to my 
>>> mind as becoming necessary down the road, but maybe I’m wrong...
>> 
>> I'm not opposed to something like this in principle, but I'm not sure how it 
>> would work in practice.  There was some discussion of something along these 
>> lines on the list at one point (I think Joe Groff had some ideas).  However, 
>> I don't think this is possible if the optimizer takes advantage of the 
>> sealed status when the library is compiled.  I'll leave it to the compiler 
>> experts to comment further on feasibility.  
> 
> My technical analysis: It’s certainly implementable to have the optimizer not 
> take advantage of the sealed status, and to allow some sort of 
> “unsafe-break-the-seal” syntax. We’d have to be sure that anything that 
> “can’t possibly happen without external subclassing” still at least generates 
> a deterministic trap rather than memory corruption, but that’s probably 
> doable.
> 
> (I’ll leave it at that, without trying to argue a particular side.)

I agree that this is implementable.  I would be very reluctant to do it, 
though; it amounts to writing off all of the performance advantages of the 
proposal.  (And possibly the semantic advantages as well, like being less 
restrictive about required initializers.)

John.

> 
> 
>>> 
>>>> I have seen some comments about nontrivial complexity in Apple’s 
>>>> frameworks caused by apps subclassing where they should not have (i.e. 
>>>> classes that would be sealed if it were possible in Objective-C).  This is 
>>>> extremely unfortunate and it impacts everyone on Apple’s platforms.
>>>> 
>>>> I wish I had links handy for you, but I don’t recall exactly where or when 
>>>> this was mentioned and don’t have time to dig them up right now.
>>> I see, thats reasonable… if those links are available somewhere I would 
>>> definitely like to see them, it would be a good education for me…
>> 
>> IIRC like Jordan Rose may have made some comments along these lines either 
>> on list or on Twitter if you want to search, but that is a fuzzy memory and 
>> could easily be wrong.  :)
> 
> I don’t have anything handy (partially because some of it isn’t public 
> knowledge), but it’s a well-known phenomenon within Apple that new OSs break 
> third-party apps in strange ways because they are relying on being able to 
> swizzle a non-public selector, or even on its existence. I’ll admit I don’t 
> hear as much about intrusive subclassing, but that doesn’t mean Apple hasn’t 
> made changes that assume no one subclasses a particular class.
> 
> [For anyone who doesn’t know the term “method swizzling”: Objective-C allows 
> you to replace a class’s implementation of a method at run-time, regardless 
> of where the class or the replacement is defined.]
> 
> Jordan
> _______________________________________________
> 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