<html><head><meta http-equiv="Content-Type" content="text/html charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class="" applecontenteditable="true"><p style="-webkit-print-color-adjust: exact; margin-right: 0px; margin-bottom: 15px; margin-left: 0px; font-family: Helvetica, arial, sans-serif; font-size: 14px; background-color: rgb(255, 255, 255); margin-top: 0px !important;" class="">Back in July, we laid out a plan for Swift 4 which divided the release into two stages. Since then, we’ve been in Swift 4 stage 1, which is characterized by the following text in the <code style="-webkit-print-color-adjust: exact; margin: 0px 2px; padding: 0px 5px; white-space: nowrap; border: 1px solid rgb(234, 234, 234); background-color: rgb(248, 248, 248); border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;" class="">swift-evolution</code>repository's <a href="https://github.com/apple/swift-evolution/blob/master/README.md#development-major-version--swift-40" style="-webkit-print-color-adjust: exact; color: rgb(65, 131, 196);" class=""><code style="-webkit-print-color-adjust: exact; margin: 0px 2px; padding: 0px 5px; white-space: nowrap; border: 1px solid rgb(234, 234, 234); background-color: rgb(248, 248, 248); border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;" class="">README.md</code></a> file as follows:</p><blockquote style="-webkit-print-color-adjust: exact; margin: 15px 0px; border-left-width: 4px; border-left-style: solid; border-left-color: rgb(221, 221, 221); padding: 0px 15px; color: rgb(119, 119, 119); font-family: Helvetica, arial, sans-serif; font-size: 14px; background-color: rgb(255, 255, 255);" class=""><p style="-webkit-print-color-adjust: exact; margin: 0px 0px 15px;" class="">Stage 1 focuses on the essentials required for source and ABI stability. Features that don't fundamentally change the ABI of existing language features or imply an ABI-breaking change to the standard library will not be considered in this stage. <strong style="-webkit-print-color-adjust: exact;" class="">Swift 4 is currently only considering proposals that fit in Stage 1</strong>.</p><p style="-webkit-print-color-adjust: exact; margin: 15px 0px 0px;" class="">Stage 2 will commence once the implementation work on the Stage 1 features is cresting, and can contain a few other large and small features. We expect that stage 2 will commence some time in Spring 2017.</p></blockquote><p style="-webkit-print-color-adjust: exact; margin: 15px 0px; font-family: Helvetica, arial, sans-serif; font-size: 14px; background-color: rgb(255, 255, 255);" class="">Since July, we now have a much better understanding now of how to achieve ABI stability, with an <a href="https://github.com/apple/swift/blob/master/docs/ABIStabilityManifesto.md" style="-webkit-print-color-adjust: exact; color: rgb(65, 131, 196);" class="">ABI Manifesto</a> detailing the list of all language/implementation work that is needed to achieve ABI stability. We have made substantial progress in that work during stage 1, but much remains to be done. Once Swift achieves ABI stability the ABI can be extended, but not changed. Thus the cost of locking down an ABI too early is quite high.</p><h3 id="toc_0" style="-webkit-print-color-adjust: exact; margin: 20px 0px 10px; padding: 0px; -webkit-font-smoothing: antialiased; cursor: text; position: relative; font-size: 18px; font-family: Helvetica, arial, sans-serif; background-color: rgb(255, 255, 255);" class="">Deferring ABI Stability from Swift 4</h3><p style="-webkit-print-color-adjust: exact; margin: 15px 0px; font-family: Helvetica, arial, sans-serif; font-size: 14px; background-color: rgb(255, 255, 255);" class="">Given the importance of getting the core ABI and the related fundamentals correct, we are going to <strong style="-webkit-print-color-adjust: exact;" class="">defer the declaration of ABI stability out of Swift 4</strong> while still focusing the <b class="">majority</b> of effort to get to the point where the ABI can be declared stable.</p><p style="-webkit-print-color-adjust: exact; margin: 15px 0px; font-family: Helvetica, arial, sans-serif; font-size: 14px; background-color: rgb(255, 255, 255);" class="">To allow the community to follow along with this effort, an ABI dashboard will get wired up from the <a href="https://github.com/apple/swift-evolution" style="-webkit-print-color-adjust: exact; color: rgb(65, 131, 196);" class="">swift-evolution</a> home page that will present a table of main ABI tasks remaining and what Swift release they landed in. This dashboard will largely track open tasks in JIRA. I expect the dashboard to be up next week, and I'll send a follow up email when it is available.</p><h2 id="toc_1" style="-webkit-print-color-adjust: exact; margin: 20px 0px 10px; padding: 0px; -webkit-font-smoothing: antialiased; cursor: text; position: relative; font-size: 24px; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: rgb(204, 204, 204); font-family: Helvetica, arial, sans-serif; background-color: rgb(255, 255, 255);" class="">Stage 2</h2><p style="-webkit-print-color-adjust: exact; margin: 15px 0px; font-family: Helvetica, arial, sans-serif; font-size: 14px; background-color: rgb(255, 255, 255);" class="">With ABI stability well-understood and many of the stage 1 goals underway, it is time to open up Swift 4 stage 2 to expand the scope of proposals to be considered.</p><h3 id="toc_2" style="-webkit-print-color-adjust: exact; margin: 20px 0px 10px; padding: 0px; -webkit-font-smoothing: antialiased; cursor: text; position: relative; font-size: 18px; font-family: Helvetica, arial, sans-serif; background-color: rgb(255, 255, 255);" class="">Timeline</h3><p style="-webkit-print-color-adjust: exact; margin: 15px 0px; font-family: Helvetica, arial, sans-serif; font-size: 14px; background-color: rgb(255, 255, 255);" class="">Stage 2 starts right now. All design work and discussion for stage 2 extends to <strong style="-webkit-print-color-adjust: exact;" class="">April 1, 2017</strong>. The intent is to timebox discussion to provide adequate time for the actual implementation of accepted proposals.</p><h3 id="toc_3" style="-webkit-print-color-adjust: exact; margin: 20px 0px 10px; padding: 0px; -webkit-font-smoothing: antialiased; cursor: text; position: relative; font-size: 18px; font-family: Helvetica, arial, sans-serif; background-color: rgb(255, 255, 255);" class="">Scope</h3><p style="-webkit-print-color-adjust: exact; margin: 15px 0px; font-family: Helvetica, arial, sans-serif; font-size: 14px; background-color: rgb(255, 255, 255);" class="">Swift 4 stage 2 builds on the goals of stage 1. It differs in that stage 2 proposals may include some additive changes and changes to existing features that don't affect the ABI. There are a few focus areas for Swift 4 stage 2:</p><ul style="-webkit-print-color-adjust: exact; margin: 15px 0px; padding-left: 30px; font-family: Helvetica, arial, sans-serif; font-size: 14px; background-color: rgb(255, 255, 255);" class=""><li style="-webkit-print-color-adjust: exact; margin: 0px;" class=""><p style="-webkit-print-color-adjust: exact; margin: 0px 0px 15px;" class=""><strong style="-webkit-print-color-adjust: exact; margin-top: 0px;" class="">Stage 1 proposals</strong>: Any proposal that would have been eligible for stage 1 is a priority for stage 2.</p></li><li style="-webkit-print-color-adjust: exact; margin: 0px;" class=""><p style="-webkit-print-color-adjust: exact; margin: 0px 0px 15px;" class=""><strong style="-webkit-print-color-adjust: exact; margin-top: 0px;" class="">Source-breaking changes</strong>: The Swift 4 compiler will provide a source-compatibility mode to allow existing Swift 3 sources to compile, but source-breaking changes can manifest in "Swift 4" mode. That said, changes to fundamental parts of Swift's syntax or standard library APIs that breaks source code are better front-loaded into Swift 4 than delayed until later releases. Relative to Swift 3, the bar for such changes is significantly higher:</p><ul style="-webkit-print-color-adjust: exact; margin: 15px 0px; padding-left: 30px;" class=""><li style="-webkit-print-color-adjust: exact; margin: 0px;" class="">The existing syntax/API being changed must be <em style="-webkit-print-color-adjust: exact; margin-top: 0px;" class="">actively harmful</em>.</li><li style="-webkit-print-color-adjust: exact; margin: 0px;" class="">The new syntax/API must <em style="-webkit-print-color-adjust: exact; margin-top: 0px;" class="">clearly</em> be better and not conflict with existing Swift syntax.</li><li style="-webkit-print-color-adjust: exact; margin: 0px;" class="">There must be a <em style="-webkit-print-color-adjust: exact; margin-top: 0px;" class="">reasonably automatable migration path</em> for existing code.</li></ul></li><li style="-webkit-print-color-adjust: exact; margin: 0px;" class=""><p style="-webkit-print-color-adjust: exact; margin: 0px 0px 15px;" class=""><strong style="-webkit-print-color-adjust: exact; margin-top: 0px;" class="">Improvements to existing Standard Library facilities</strong>: Additive changes that improve existing standard library facilities can be considered. With standard library additions in particular, proposals that provide corresponding implementations are preferred. Potential focus areas for improvement include collections (e.g., new collection algorithms) and improvements to the ergonomics of <code style="-webkit-print-color-adjust: exact; margin: 0px 2px; padding: 0px 5px; white-space: nowrap; border: 1px solid rgb(234, 234, 234); background-color: rgb(248, 248, 248); border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;" class="">Dictionary</code>.</p></li><li style="-webkit-print-color-adjust: exact; margin: 0px;" class=""><p style="-webkit-print-color-adjust: exact; margin: 0px 0px 15px;" class=""><strong style="-webkit-print-color-adjust: exact; margin-top: 0px;" class="">Foundation improvements</strong>: We anticipate proposing some targeted improvements to Foundation API to continue the goal of making the Cocoa SDK work seamlessly in Swift. Details on the specific goals will be provided as we get started on Swift 4 stage 2.</p></li></ul><p style="-webkit-print-color-adjust: exact; margin: 15px 0px; font-family: Helvetica, arial, sans-serif; font-size: 14px; background-color: rgb(255, 255, 255);" class="">As part of initiating Swift 4 stage 2, the Core Team reviewed those proposals that were accepted into Swift 3 but were never implemented:</p><ul style="-webkit-print-color-adjust: exact; margin: 15px 0px; padding-left: 30px; font-family: Helvetica, arial, sans-serif; font-size: 14px; background-color: rgb(255, 255, 255);" class=""><li style="-webkit-print-color-adjust: exact; margin: 0px;" class=""><p style="-webkit-print-color-adjust: exact; margin: 0px 0px 15px;" class=""><strong style="-webkit-print-color-adjust: exact; margin-top: 0px;" class="">SE-0104 "Protocol-oriented Integers"</strong>: This proposal requires revision and another round of review based on other changes that have been made to the language and standard library since acceptance.</p></li><li style="-webkit-print-color-adjust: exact; margin: 0px;" class=""><p style="-webkit-print-color-adjust: exact; margin: 0px 0px 15px;" class=""><strong style="-webkit-print-color-adjust: exact; margin-top: 0px;" class="">SE-0075 "Adding a Build Configuration Import Test"</strong>: This is (still) an additive proposal and no other changes affect this proposal. It will be carried forward and considered accepted for Swift 4.</p></li><li style="-webkit-print-color-adjust: exact; margin: 0px;" class=""><p style="-webkit-print-color-adjust: exact; margin: 0px 0px 15px;" class=""><strong style="-webkit-print-color-adjust: exact; margin-top: 0px;" class="">SE-0042 "Flattening the function type of unapplied method references”</strong>: This proposal requires another round of review. This is a significant source-breaking change, and the bar for such source-breaking changes is considerably higher in Swift 4 than it was in Swift 3.</p></li><li style="-webkit-print-color-adjust: exact; margin: 0px;" class=""><p style="-webkit-print-color-adjust: exact; margin: 0px 0px 15px;" class=""><strong style="-webkit-print-color-adjust: exact; margin-top: 0px;" class="">SE-0068 "Expanding Swift Self to class members and value types"</strong>: This is (still) an additive proposal and no other changes affect this proposal. It will be carried forward and considered accepted for Swift 4.</p></li></ul><p style="-webkit-print-color-adjust: exact; margin: 15px 0px; font-family: Helvetica, arial, sans-serif; font-size: 14px; background-color: rgb(255, 255, 255);" class="">The Core Team has also identified some <a href="https://bugs.swift.org/browse/SR-3316?jql=labels%20%3D%20StarterProposal" style="-webkit-print-color-adjust: exact; color: rgb(65, 131, 196);" class="">starter proposals</a> that fit well with the goals of Swift 4. Taking one of those ideas and developing it into a complete proposal is a fantastic way to get involved in the Swift evolution process.</p><p style="-webkit-print-color-adjust: exact; margin: 15px 0px; font-family: Helvetica, arial, sans-serif; font-size: 14px; background-color: rgb(255, 255, 255);" class="">Ted</p></body></html>