SE-0470: Global-actor isolated conformances

Generally speaking, we try to keep back-deployment considerations out of the design of language features, because they are vendor-specific and if taken to the extreme, can negatively affect the long-term language design.

The dynamic casting machinery is part of the runtime, and "force cast" is effectively a conditional cast + a force unwrap. We can encode the requirements of an isolated conformance in a manner that they will cause an older runtime to always reject the conformance (so it never works dynamically) or always accept the conformance (so it will always work dynamically). The implementation currently does the latter, which admits data races. The only alternative I can think of that wasn't taken would be to inject an otherwise-unused assumeIsolated {} into each of the functions that satisfies a requirement in an isolated conformance, but only do so when back-deploying. That way the cast (whether conditional or forced) would succeed (ugh), but you'd get a fatal error at runtime rather than a data race.

Sneaky! The prototype implementation does not implement it yet, but the last paragraph on data-race safety in the proposal indicates that we will need to communicate the Sendable-ness of an existential type down to the runtime so it can refuse to use an isolated conformance for a cast to (e.g.)any P & Sendable. I believe that covers this case.

Doug