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
Thoughts?
- Doug
_______________________________________________
swift-dev mailing list
[email protected]
https://lists.swift.org/mailman/listinfo/swift-dev