[swift-dev] Conditional conformance: Removing the opt-in flag

Ted Kremenek kremenek at apple.com
Tue Dec 19 16:26:19 CST 2017


On Dec 18, 2017, 4:53 PM -0800, Douglas Gregor via swift-dev <swift-dev at swift.org>, wrote:
> Hi all,
>
> A little while back, I added an error to the Swift 4.1 compiler that complains if one tries to use conditional conformances, along with a flag “-enable-experimental-conditional-conformances” to enable the feature. We did this because we haven’t implemented the complete proposal yet; specifically, we don’t yet handle dynamic casting that involves conditional conformances, and won’t in Swift 4.1.
>
> I’d like to take away the "-enable-experimental-conditional-conformances” flag and always allow conditional conformances in Swift 4.1, because the changes in the standard library that make use of conditional conformances can force users to change their code *to themselves use conditional conformances*. Specifically, if they had code like this:
>
> > extension MutableSlice : P { }
> > extension MutableBidirectionalSlice : P { }
> > // …
>
> they’ll get an error about overlapping conformances, and need to do something like the following to fix the issue:
>
> > extension Slice: P where Base: MutableCollection { }
>
> which is way more elegant, but would require passing "-enable-experimental-conditional-conformances”. That seems… unfortunate… given that we’re forcing them to use this feature.
>
> My proposal is, specifically:
>
>
> • Allow conditional conformances to be used in Swift 4.1 (no flag required)
> • Drop the -enable-experimental-conditional-conformances flag entirely
> • Add a runtime warning when an attempt to dynamic cast fails due to a conditional conformance, so at least users know what’s going on
>
>

The last bullet doesn’t feel right to me.  It sounds like we would ship a feature that we know only partially works, but issue a runtime warning in the case we know isn’t fully implemented?  I’m I interpretting that point correctly?

> Thoughts?
>
> - Doug
>
> _______________________________________________
> swift-dev mailing list
> swift-dev at swift.org
> https://lists.swift.org/mailman/listinfo/swift-dev
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-dev/attachments/20171219/2a1fc638/attachment.html>


More information about the swift-dev mailing list