This morning SE-0054, which abolishes the ImplicitlyUnwrappedOptional
type (to be clear, the functionality will now be limited to declarations) was tentatively accepted by the Swift Core Team.
There is generally positive feedback on the proposal, as it keeps the good behaviors of the existing T! type syntax (including support for importing un-nullability-audited APIs, support for 2-phase initialization patterns, etc) while dramatically reducing the confusion and surprise that they introduce as they trickle through type inference. The core team sees significant value in having a simple and predictable model that can be explained concisely.
At the same time, the team recognized that adopting this proposal without giving it a good proper run, on real life projects, might not be the best idea in the world. It accepted it “pending implementation experience,” or with an option to back out if things go belly up in real life.
That said, this is the sort of proposal that can have a profound impact on the actual experience using unaudited APIs. The core team believes that the experience will be good, but we would like to get some experience moving a couple of existing projects (both low-level code that interacts with C, and an “App” project working with high level frameworks) to see what the impact is in practice. If something unexpected comes up, we will revisit this, and potentially reject it later. Chris Willmore is working on an implementation of this now, so we should know in the next week or two.
While several proposals have been accepted for Swift with requested revisions, this is the first one to include an official escape clause.