<html><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class="">I realize that there’s no review needed, but I actually wanted to give a hearty 👏 to the authors and commenters of this proposal, because I genuinely think we’ve reached something good in the result.<div class=""><br class=""></div><div class="">The selling point for me is this:</div><div class=""><br class=""></div><div class=""><pre style="box-sizing: border-box; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 14px; margin-top: 0px; margin-bottom: 0px; line-height: 1.45; word-wrap: normal; padding: 16px; overflow: auto; background-color: rgb(247, 247, 247); border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; word-break: normal; color: rgb(51, 51, 51);" class=""><span class="pl-c" style="box-sizing: border-box; color: rgb(150, 152, 150);">// This is allowed since the superclass is `open`.</span>
<span class="pl-k" style="box-sizing: border-box; color: rgb(167, 29, 93);">class</span> SubclassB <span class="pl-k" style="box-sizing: border-box; color: rgb(167, 29, 93);">:</span> SubclassableParentClass {
    <span class="pl-c" style="box-sizing: border-box; color: rgb(150, 152, 150);">// This is invalid because it overrides a method that is</span>
    <span class="pl-c" style="box-sizing: border-box; color: rgb(150, 152, 150);">// defined outside of the current module but is not `open'.</span>
    <span class="pl-k" style="box-sizing: border-box; color: rgb(167, 29, 93);">override</span> <span class="pl-k" style="box-sizing: border-box; color: rgb(167, 29, 93);">func</span> <span class="pl-en" style="box-sizing: border-box; color: rgb(121, 93, 163);">foo</span>() { }

    <span class="pl-c" style="box-sizing: border-box; color: rgb(150, 152, 150);">// This is allowed since the superclass's method is overridable.</span>
    <span class="pl-c" style="box-sizing: border-box; color: rgb(150, 152, 150);">// It does not need to be marked `open` because it is defined on</span>
    <span class="pl-c" style="box-sizing: border-box; color: rgb(150, 152, 150);">// an `internal` class.</span>
    <span class="pl-k" style="box-sizing: border-box; color: rgb(167, 29, 93);">override</span> <span class="pl-k" style="box-sizing: border-box; color: rgb(167, 29, 93);">func</span> <span class="pl-en" style="box-sizing: border-box; color: rgb(121, 93, 163);">bar</span>() { }
}
</pre></div><div class=""><br class=""></div><div class="">This feels super-clean; it gives Library developers `open` for their APIs, without confusing app developers, and still requires that sub-classing Library developers think about `open`.</div><div class=""><br class=""></div><div class="">Good job, everyone!</div><div class=""><br class=""></div><div class="">Scott</div></body></html>