> On Dec 19, 2017, at 2:26 PM, Ted Kremenek via swift-dev <[email protected]>
> wrote:
>
>
> On Dec 18, 2017, 4:53 PM -0800, Douglas Gregor via swift-dev
> <[email protected]>, 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?
Yes, that’s correct. We will fail to match the conformance (i.e., return “nil”
from an “as?” cast), which might be correct and might be wrong.
- Doug
_______________________________________________
swift-dev mailing list
[email protected]
https://lists.swift.org/mailman/listinfo/swift-dev