Returning or rejecting all the “deferred” evolution proposals

In the early days of Swift Evolution, the Core Team sometimes ran reviews for proposals and then decided after the review that the proposal wasn't really timely and so needed to be deferred. We stopped using this status years ago; we want reviews to end in a clear decision, and we don't want to run reviews if we're not going to be able to make that decision. However, we still have a handful of proposals in this state.

The Language Workgroup has recently been trying to clean up all the old proposals with unclear status. As part of that, we've done a review of the six remaining deferred proposals and reached a decision for each about whether to return it to be potentially reconsidered or simply reject it outright.

We have returned three proposals:

Returned proposals will need to undergo new rounds of evolution pitch and review. These proposals were never accepted, and even if they had been, they may no longer make sense for the language. In order to be reviewed, they will need to meet the new standards for review, including having a working implementation. If the original proposal author is no longer interested in advancing one of these proposals, any member of the community is welcome to take it over.

We have rejected the remaining three:

  • SE-0026: Abstract classes and methods. This was originally deferred in order to gain more experience in the community about "protocol-oriented" design and whether it provides a compelling alternative to abstract classes. The Language Workgroup feels comfortable today saying that it does, and we are reluctant to add more features to encourage this style of class-oriented design.
  • SE-0058: Allow Swift types to provide custom Objective-C representations. This proposal is to make official a protocol that has long existed in the standard library. Having lived with this design for many years, the Workgroup does not think that extending the set of innately bridged types would be a good idea. Giving users more power over import on a type level might be desirable, but this protocol is not the right way to do it; among other things, it is likely that that relationship would naturally be many-to-one and should be guided by annotations on the imported type, not the target type.
  • SE-0083: Remove bridging behavior from dynamic casts. There is no longer any room to make this change; this is too deeply locked into the semantics of Swift, and dynamic casts are by their nature too dynamic for it to be comfortable to vary this behavior just by static context (like what language mode the cast is compiled in).

The rejection of a proposal is not necessarily permanent, but the Language Workgroup would need to see substantial new evidence or arguments in order to revisit it.

John McCall
Language Workgroup Chair

52 Likes