> On Jul 14, 2016, at 4:18 PM, Paul Cantrell via swift-evolution > <[email protected]> wrote: > > >> On Jul 14, 2016, at 4:39 PM, Chris Lattner <[email protected] >> <mailto:[email protected]>> wrote: >> >> To sum this all up, the core team is … requesting a revision to change the >> concrete syntax to “public open class Foo” instead of “subclassable class >> Foo”. > > Yes, +1 to “public open Foo” instead of “subclassable Foo”. > > Presumably “open” without “public” is an error…? > >> [The core team] asks the community for an in-depth discussion of the >> secondary points of the proposal: does it make sense to require every member >> to be marked as “overridable” in order to be overridden by an open subclass >> outside of the current module?
I don’t see a reason for the openness/overridability/virtualness/finalness of a member to be more complex than a boolean. That is, while classes can be final, sealed or open, I believe members should only be “open” or “final”. I don’t see use cases to have members that are only overridable in-module but not by external parties. As we suspect an API designer to indicate whether a class is overridable or not by third parties and to determine whether members are exposed to third parties, I would expect them to also want to dictate *how* said type is overridable by third parties (e.g. which members are overridable). Whether we are open by default or final by default allows them to do this, but transitioning from final to open shouldn’t break existing API usage on revision. You won’t have someone accidentally using your library in a way you didn’t intend to support because you forgot to mark a method as ‘open’. Therefore, I lean toward final by default. > This makes me wonder whether we should remove member-level “final” from the > language, and require “overridable” (i.e. final methods by default) even for > members of non-open classes just for consistency and simplicity. That may be > a separate proposal, but does seem like it needs consideration for Swift 3. In an inheritance chain, we have to decide whether a subclass inherits the method openness. If so, “final override” could still be valid. Otherwise, I agree about removing member-level ‘final' -DW
_______________________________________________ swift-evolution mailing list [email protected] https://lists.swift.org/mailman/listinfo/swift-evolution
