> On Sep 26, 2016, at 5:37 PM, Robert Widmann <devteam.cod...@gmail.com> wrote:
> 
> +1.  I have one purely bureaucratic concern that I couldn't quite find 
> answers to on a read through:
> 
> Orphan instances

Not sure what you mean by “orphan instances”?

> and more generally cross-module uniqueness of instances are not mentioned.  
> What's the policy here?  Are we locally unique with respect to imported 
> modules or globally unique with respect to all importable modules?

Yeah, this is a painfully underspecified area of Swift’s generics system. The 
compiler diagnoses redundant conformances when it sees both conformances, but 
that’s not enough to guarantee global uniqueness. The runtime effectively 
depends on global uniqueness, and there are no mechanisms in the language or 
runtime to disambiguate if the non-unique conformances occur.

We’re not in an ideal state, although I don’t think the conditional 
conformances proposal is the place to try to fix it. Personally, I think we 
should codify the globally-unique model and provide some level of safety in the 
runtime to detect (lazily) when there is a run-time conflict. It’s probably 
worthy of a proposal, although it would be an odd sort of proposal—mostly about 
describing the model and the trade-offs (no private conformances, potential for 
run-time oddities if a conflict does occur, etc.) vs. allowing multiple 
conformances to co-exist (dynamic-casting complexity, the need for a 
disambiguation mechanism, etc.). At most, we could make it clearer in source 
code when you’re doing something that *could* cause a runtime conflict. For 
example, writing a conformance in the module that defines the type or the 
module that defines the protocol is guaranteed to be okay (modulo resilience!), 
but a retroactive conformance in a third model is potentially unsafe and might 
be worthy of some kind of attribute.

Anyway, some random thoughts on this issue are in the generics manifesto:

        
https://github.com/apple/swift/blob/master/docs/GenericsManifesto.md#private-conformances

        - Doug

> 
> ~Robert Widmann
> 
> 2016/09/26 20:18、Douglas Gregor via swift-evolution 
> <swift-evolution@swift.org <mailto:swift-evolution@swift.org>> のメッセージ:
> 
>> Conditional conformances
>> 
>> Proposal: SE-NNNN 
>> <https://github.com/DougGregor/swift-evolution/blob/conditional-conformances/proposals/NNNN-conditional-conformances.md>
>> Author: Doug Gregor <https://github.com/DougGregor>
>> Review Manager: TBD
>> Status: Awaiting review
>> During the review process, add the following fields as needed:
>> 
>> Decision Notes: Rationale 
>> <https://lists.swift.org/pipermail/swift-evolution/>, Additional Commentary 
>> <https://lists.swift.org/pipermail/swift-evolution/>
>> Bugs: SR-NNNN <https://bugs.swift.org/browse/SR-NNNN>, SR-MMMM 
>> <https://bugs.swift.org/browse/SR-MMMM>
>> Previous Revision: 1 
>> <https://github.com/apple/swift-evolution/blob/...commit-ID.../proposals/NNNN-filename.md>
>> Previous Proposal: SE-XXXX 
>> <https://github.com/DougGregor/swift-evolution/blob/conditional-conformances/proposals/XXXX-filename.md>
>>  
>> <https://github.com/DougGregor/swift-evolution/tree/conditional-conformances#introduction>[snip[
_______________________________________________
swift-evolution mailing list
swift-evolution@swift.org
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to