> On Feb 13, 2017, at 09:33, Matthew Johnson via swift-evolution
> <[email protected]> wrote:
>
>>
>> On Feb 13, 2017, at 11:28 AM, James Froggatt via swift-evolution
>> <[email protected]> wrote:
>>
>> Having loosely followed this discussion, the way I'm thinking of ‘closed’ is
>> as a modifier which would let you switch over something from outside the
>> module in which it is declared.
>>
>> From outside the declaring module:
>> • A closed enum's cases can be exhaustively switched.
>> • A closed protocol's conforming types can be exhaustively switched.
>> • A closed class's subclasses can be exhaustively switched.
>>
>> If this is correct, I can't help but think ‘closed’ is describing something
>> subtly different in each case - picking and choosing the ‘important’
>> relationship for each type, while protocols already have a subtyping
>> relationship, and it sounds like there's possibility for enum subtyping in
>> the future.
>>
>> I'd rather keep ‘open’ (and a potential future ‘closed’) purely describing
>> the subtyping relationship, and have some other means of labelling
>> conformance and cases as switchable.
>
> I am drafting a manifesto-style document regarding value subtyping which will
> make it clear how value subtypes fit into the picture. This document covers
> the relationship of enum cases with value subtyping and will show clearly how
> enum cases are analogous to subclasses.
I'm not sure how it fits your document, but I suspect value subtyping is pretty
much not at all a source-compatibility or binary-compatibility concern. I think
the only reasonable implementation here would be to perform conversions
(unidirectional or bidirectional?), which means that the subtyping is almost
entirely a client-side feature and the only potential dynamic operation would
be using 'as?' with a generic type. This is very different from protocols and
classes, which perform dynamic dispatch to method implementations present on
their subtypes.
That is, the only effect of making a type "non-open" with respect to value
subtyping would be to cut down on potential costs of 'as?'.
Jordan
_______________________________________________
swift-evolution mailing list
[email protected]
https://lists.swift.org/mailman/listinfo/swift-evolution