On 22.07.2016 11:15, Dave Abrahams via swift-evolution wrote:
....skipped...

IMO, the safety of API contracts is secondary. This is about safety of
implementation - my code is possibly not "resilient" enough (to to
speak) to handle overriding arbitrary public members.

I wrote that subclassability is not an important element of safety
**independent of overriding**.  If you don't allow any overriding,
your code is always “resilient” enough to handle subclassing.


I believe in this case the #2 approach, as formulated in proposal, just can't work - base class of public class can have(and can add) `open` methods/props, so for the author of such public class it is hard to know what other methods (other than explicitly marked by him/her as `open`) would be overridden.

So, seems like for #2 approach the proposal should be changed to not implicitly open inherited `open` methords/props. Author of public class in this case must explicitly mark as `open` each method/prop one wants to export opened.

Then, in this case, we have a problem with *inherited* methods/props that author *want* to open. In this case to remove boilerplate like 'public open func f() { super.f()}', I don't see another way than adding new concept of re-introducing of inherited method without its body :

public class B : A {
  public open *reintroduce* var property  // without type/details
  public open *reintroduce* func foo()  // without body

  public open override func bar()
  {
     //some code
     super.bar()
     //some code
  }

  public open func newFunc() {...}
  public func sealedFunc() {...}
}

(`reintroduce` as fast example of possible keyword for implementation of such feature)

Am I missing something?
_______________________________________________
swift-evolution mailing list
[email protected]
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to