> On May 8, 2017, at 4:02 PM, Tony Allevato <tony.allev...@gmail.com> wrote:
> 
> On Sat, May 6, 2017 at 4:17 PM Chris Lattner <clatt...@nondot.org 
> <mailto:clatt...@nondot.org>> wrote:
> On May 5, 2017, at 11:33 AM, Tony Allevato via swift-evolution 
> <swift-evolution@swift.org <mailto:swift-evolution@swift.org>> wrote:
>> 
>> 
>> 
>> Can the opt-in conformance be declared in an extension?  If so, can the 
>> extension be in a different module than the original declaration?  If so, do 
>> you intend any restrictions, such as requiring all members of the type 
>> declared in a different module to be public?  My initial thought is that 
>> this should be possible as long as all members are visible.
>> 
>> Declaring the conformance in an extension in the same module should 
>> definitely be allowed;
> 
> Please follow the precedent of the Codable proposal as closely as possible.  
> If you’d like this to be successful for Swift 4, you should look to scope it 
> as narrowly as possible.  Because it is additive (with opt-in), it can always 
> be extended in the future.
> 
>> I believe this would currently be the only way to support conditional 
>> conformances (such as the `Optional: Hashable where Wrapped: Hashable` 
>> example in the updated draft), without requiring deeper syntactic changes.
> 
> This proposal doesn’t need to cover all cases, since it is just sugaring a 
> (very common) situation.  Conditional conformances to Hashable could be 
> written manually.
> 
>> I'm less sure about conformances being added in other modules,
> 
> It is a bad idea, it would break resilience of the extended type.
> 
>> But after writing this all out, I'm inclined to agree that I'd rather see 
>> structs/enums make it into Swift 4 even if it meant pushing classes to Swift 
>> 4+x.
> 
> Agreed, keep it narrow to start with.
> 
> Also, I don’t know how the rest of the core team feels about this, but I 
> suspect that they will be reticent to take an additive proposal at this late 
> point in the schedule, unless someone is willing to step up to provide an 
> implementation.
> 
> That someone is me :)  I have a branch where it's working for enums (modulo 
> some weirdness I need to fix after rebasing a two-month-old state), and 
> adapting that logic to structs should hopefully be straightforward after 
> that. Going with the more narrowly-scoped proposal and making conformances 
> explicit simplifies the implementation a great deal as well (I was previously 
> blocked with recursive types when it was implicit).
> 
> Thanks for the feedback—after consideration, I've pulled classes out of the 
> proposal completely (even non-final) and mentioned the other limitations so 
> we'd have a record of what was discussed in this thread.
> 
> I've created a PR for the proposal text, in the event that the core team is 
> interested in moving this forward: 
> https://github.com/apple/swift-evolution/pull/706 
> <https://github.com/apple/swift-evolution/pull/706>
Thanks for continuing to push this forward Tony!  The current proposal looks 
like the right approach for getting this into Swift 4.  

I only have one question which I will present with an example:

protocol Foo: Equatable {}
protocol Bar: Hashable {}

struct FooType: Foo {}
struct BarType: Bar {}

Do FooType and BarType receive synthesis?

> 
>  
> 
> -Chris
> 
> 

_______________________________________________
swift-evolution mailing list
swift-evolution@swift.org
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to