<div dir="ltr"><br><br><div class="gmail_quote"><div dir="ltr">On Wed, Jul 27, 2016 at 3:58 PM Dave Abrahams &lt;<a href="mailto:dabrahams@apple.com">dabrahams@apple.com</a>&gt; wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><br>
on Wed Jul 27 2016, Ted Kremenek &lt;kremenek-AT-apple.com&gt; wrote:<br>
<br>
&gt; - swift-evolution, swift-evolution-announce<br>
&gt;<br>
&gt; Dave/Max: can you speak this?<br>
<br>
&gt;&gt; On Jul 27, 2016, at 3:17 PM, Tony Allevato &lt;<a href="mailto:allevato@google.com" target="_blank">allevato@google.com</a>&gt; wrote:<br>
&gt;&gt;<br>
&gt;&gt; I noticed that while SE-0091 appears to be implemented (from a<br>
&gt;&gt; cursory glance at some of the affected types like Equatable and<br>
&gt;&gt; String), it looks like the named methods are still part of the<br>
&gt;&gt; FloatingPoint protocol and they still use global operators.<br>
&gt;&gt;<br>
&gt;&gt; Is anyone tracking the migration of that protocol (and possibly also<br>
&gt;&gt; the new Integer protocols) to use the new operator technique? (I<br>
&gt;&gt; have to apologize for not being able to update the proposal with<br>
&gt;&gt; another PR that listed all those changes—my free time outside my day<br>
&gt;&gt; job has been significantly reduced lately.)<br>
<br>
I think we view those changes as implicitly approved along with SE-0091.<br>
I was working on making them but we&#39;ve run into bugs with the feature&#39;s<br>
implementation during the migration.  When those are straightened out,<br>
we can move forward with that cleanup.<br></blockquote><div><br></div><div>That&#39;s good to hear. Thanks for confirming!</div><div><br></div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
&gt;&gt; On Wed, Jul 27, 2016 at 12:38 PM Ted Kremenek via swift-evolution<br>
&gt;&gt; &lt;<a href="mailto:swift-evolution@swift.org" target="_blank">swift-evolution@swift.org</a> &lt;mailto:<a href="mailto:swift-evolution@swift.org" target="_blank">swift-evolution@swift.org</a>&gt;&gt;<br>
&gt;&gt; wrote:<br>
&gt;&gt; Dear friends,<br>
&gt;&gt;<br>
&gt;&gt; Today is July 27 — and the last planned day to take source-breaking<br>
&gt;&gt; changes for Swift 3. It has been an incredible ride to this point,<br>
&gt;&gt; so let&#39;s take stock of where we are. Here are the list of currently<br>
&gt;&gt; accepted — but not yet (fully) implemented — evolution proposals<br>
&gt;&gt; (this is drawn from the &quot;accepted&quot; but not marked &quot;implemented&quot;<br>
&gt;&gt; proposals from the swift-evolution<br>
&gt;&gt; &lt;<a href="https://github.com/apple/swift-evolution" rel="noreferrer" target="_blank">https://github.com/apple/swift-evolution</a>&gt; repository):<br>
&gt;&gt;<br>
&gt;&gt; SE-0025 - Scoped Access Level<br>
&gt;&gt; &lt;<a href="https://github.com/apple/swift-evolution/blob/master/proposals/0025-scoped-access-level.md" rel="noreferrer" target="_blank">https://github.com/apple/swift-evolution/blob/master/proposals/0025-scoped-access-level.md</a>&gt;<br>
&gt;&gt; SE-0042 - Flattening the function type of unapplied method<br>
&gt;&gt; references<br>
&gt;&gt; &lt;<a href="https://github.com/apple/swift-evolution/blob/master/proposals/0042-flatten-method-types.md" rel="noreferrer" target="_blank">https://github.com/apple/swift-evolution/blob/master/proposals/0042-flatten-method-types.md</a>&gt;<br>
&gt;&gt; SE-0045 - Add scan, prefix(while:), drop(while:), and iterate to the<br>
&gt;&gt; stdlib<br>
&gt;&gt; &lt;<a href="https://github.com/apple/swift-evolution/blob/master/proposals/0045-scan-takewhile-dropwhile.md" rel="noreferrer" target="_blank">https://github.com/apple/swift-evolution/blob/master/proposals/0045-scan-takewhile-dropwhile.md</a>&gt;<br>
&gt;&gt; SE-0068 - Expanding Swift Self to class members and value types<br>
&gt;&gt; &lt;<a href="https://github.com/apple/swift-evolution/blob/master/proposals/0068-universal-self.md" rel="noreferrer" target="_blank">https://github.com/apple/swift-evolution/blob/master/proposals/0068-universal-self.md</a>&gt;<br>
&gt;&gt; SE-0075 - Adding a Build Configuration Import Test<br>
&gt;&gt; &lt;<a href="https://github.com/apple/swift-evolution/blob/master/proposals/0075-import-test.md" rel="noreferrer" target="_blank">https://github.com/apple/swift-evolution/blob/master/proposals/0075-import-test.md</a>&gt;<br>
&gt;&gt; SE-0077 - Improved operator declarations<br>
&gt;&gt; &lt;<a href="https://github.com/apple/swift-evolution/blob/master/proposals/0077-operator-precedence.md" rel="noreferrer" target="_blank">https://github.com/apple/swift-evolution/blob/master/proposals/0077-operator-precedence.md</a>&gt;<br>
&gt;&gt; SE-0080 - Failable Numeric Conversion Initializers<br>
&gt;&gt; &lt;<a href="https://github.com/apple/swift-evolution/blob/master/proposals/0080-failable-numeric-initializers.md" rel="noreferrer" target="_blank">https://github.com/apple/swift-evolution/blob/master/proposals/0080-failable-numeric-initializers.md</a>&gt;<br>
&gt;&gt; SE-0081 - Move where clause to end of declaration<br>
&gt;&gt; &lt;<a href="https://github.com/apple/swift-evolution/blob/master/proposals/0081-move-where-expression.md" rel="noreferrer" target="_blank">https://github.com/apple/swift-evolution/blob/master/proposals/0081-move-where-expression.md</a>&gt;<br>
&gt;&gt; SE-0082 - Package Manager Editable Packages<br>
&gt;&gt; &lt;<a href="https://github.com/apple/swift-evolution/blob/master/proposals/0082-swiftpm-package-edit.md" rel="noreferrer" target="_blank">https://github.com/apple/swift-evolution/blob/master/proposals/0082-swiftpm-package-edit.md</a>&gt;<br>
&gt;&gt; SE-0088 - Modernize libdispatch for Swift 3 naming conventions<br>
&gt;&gt; &lt;<a href="https://github.com/apple/swift-evolution/blob/master/proposals/0088-libdispatch-for-swift3.md" rel="noreferrer" target="_blank">https://github.com/apple/swift-evolution/blob/master/proposals/0088-libdispatch-for-swift3.md</a>&gt;<br>
&gt;&gt; SE-0089 - Renaming String.init&lt;T&gt;(_: T)<br>
&gt;&gt; &lt;<a href="https://github.com/apple/swift-evolution/blob/master/proposals/0089-rename-string-reflection-init.md" rel="noreferrer" target="_blank">https://github.com/apple/swift-evolution/blob/master/proposals/0089-rename-string-reflection-init.md</a>&gt;<br>
&gt;&gt; SE-0092 - Typealiases in protocols and protocol extensions<br>
&gt;&gt; &lt;<a href="https://github.com/apple/swift-evolution/blob/master/proposals/0092-typealiases-in-protocols.md" rel="noreferrer" target="_blank">https://github.com/apple/swift-evolution/blob/master/proposals/0092-typealiases-in-protocols.md</a>&gt;<br>
&gt;&gt; SE-0096 - Converting dynamicType from a property to an operator<br>
&gt;&gt; &lt;<a href="https://github.com/apple/swift-evolution/blob/master/proposals/0096-dynamictype.md" rel="noreferrer" target="_blank">https://github.com/apple/swift-evolution/blob/master/proposals/0096-dynamictype.md</a>&gt;<br>
&gt;&gt; SE-0099 - Restructuring Condition Clauses<br>
&gt;&gt; &lt;<a href="https://github.com/apple/swift-evolution/blob/master/proposals/0099-conditionclauses.md" rel="noreferrer" target="_blank">https://github.com/apple/swift-evolution/blob/master/proposals/0099-conditionclauses.md</a>&gt;<br>
&gt;&gt; SE-0101 - Reconfiguring sizeof and related functions into a<br>
&gt;&gt; unified MemoryLayout struct<br>
&gt;&gt; &lt;<a href="https://github.com/apple/swift-evolution/blob/master/proposals/0101-standardizing-sizeof-naming.md" rel="noreferrer" target="_blank">https://github.com/apple/swift-evolution/blob/master/proposals/0101-standardizing-sizeof-naming.md</a>&gt;<br>
&gt;&gt; SE-0102 - Remove @noreturn attribute and introduce an<br>
&gt;&gt; empty Never type<br>
&gt;&gt; &lt;<a href="https://github.com/apple/swift-evolution/blob/master/proposals/0102-noreturn-bottom-type.md" rel="noreferrer" target="_blank">https://github.com/apple/swift-evolution/blob/master/proposals/0102-noreturn-bottom-type.md</a>&gt;<br>
&gt;&gt; SE-0103 - Make non-escaping closures the default<br>
&gt;&gt; &lt;<a href="https://github.com/apple/swift-evolution/blob/master/proposals/0103-make-noescape-default.md" rel="noreferrer" target="_blank">https://github.com/apple/swift-evolution/blob/master/proposals/0103-make-noescape-default.md</a>&gt;<br>
&gt;&gt; SE-0104 - Protocol-oriented integers<br>
&gt;&gt; &lt;<a href="https://github.com/apple/swift-evolution/blob/master/proposals/0104-improved-integers.md" rel="noreferrer" target="_blank">https://github.com/apple/swift-evolution/blob/master/proposals/0104-improved-integers.md</a>&gt;<br>
&gt;&gt; SE-0107 - UnsafeRawPointer API<br>
&gt;&gt; &lt;<a href="https://github.com/apple/swift-evolution/blob/master/proposals/0107-unsaferawpointer.md" rel="noreferrer" target="_blank">https://github.com/apple/swift-evolution/blob/master/proposals/0107-unsaferawpointer.md</a>&gt;<br>
&gt;&gt; SE-0110 - Distinguish between single-tuple and multiple-argument<br>
&gt;&gt; function types<br>
&gt;&gt; &lt;<a href="https://github.com/apple/swift-evolution/blob/master/proposals/0110-distingish-single-tuple-arg.md" rel="noreferrer" target="_blank">https://github.com/apple/swift-evolution/blob/master/proposals/0110-distingish-single-tuple-arg.md</a>&gt;<br>
&gt;&gt; SE-0111 - Remove type system significance of function argument<br>
&gt;&gt; labels<br>
&gt;&gt; &lt;<a href="https://github.com/apple/swift-evolution/blob/master/proposals/0111-remove-arg-label-type-significance.md" rel="noreferrer" target="_blank">https://github.com/apple/swift-evolution/blob/master/proposals/0111-remove-arg-label-type-significance.md</a>&gt;<br>
&gt;&gt; SE-0120 - Revise partition Method Signature<br>
&gt;&gt; &lt;<a href="https://github.com/apple/swift-evolution/blob/master/proposals/0120-revise-partition-method.md" rel="noreferrer" target="_blank">https://github.com/apple/swift-evolution/blob/master/proposals/0120-revise-partition-method.md</a>&gt;<br>
&gt;&gt; SE-0127 - Cleaning up stdlib Pointer and Buffer Routines<br>
&gt;&gt; &lt;<a href="https://github.com/apple/swift-evolution/blob/master/proposals/0127-cleaning-up-stdlib-ptr-buffer.md" rel="noreferrer" target="_blank">https://github.com/apple/swift-evolution/blob/master/proposals/0127-cleaning-up-stdlib-ptr-buffer.md</a>&gt;<br>
&gt;&gt; These are all changes the community has approved for Swift but did<br>
&gt;&gt; not make today&#39;s cutoff. Some of these proposals have<br>
&gt;&gt; implementations actively underway. For those proposals already in<br>
&gt;&gt; active development — and near completion — I am okay with extending<br>
&gt;&gt; the deadline for those changes to Friday, July 29. Such changes need<br>
&gt;&gt; to be approved by the release manager (myself) and should be merged<br>
&gt;&gt; into master via a pull request. When creating the pull request,<br>
&gt;&gt; please assign it to me (tkremenek), and mention the pull request on<br>
&gt;&gt; the swift-dev mailing list as well with the SE number in the email<br>
&gt;&gt; title.<br>
&gt;&gt;<br>
&gt;&gt; The rest of the unimplemented proposals do not make Swift 3. This<br>
&gt;&gt; leaves us with the question of what to do with them. These proposals<br>
&gt;&gt; represent the known and reviewed changes we want to make to Swift,<br>
&gt;&gt; but inevitably there will also be changes that we don&#39;t even know<br>
&gt;&gt; about today that we will want to take into Swift that can impact<br>
&gt;&gt; core source stability. That said, we also have a very strong desire<br>
&gt;&gt; to maintain source compatibility with Swift 3 and Swift 4 as much as<br>
&gt;&gt; possible to provide some stability for which Swift users to build<br>
&gt;&gt; upon. The challenge of course is reconciling these diametrically<br>
&gt;&gt; opposing goals: maintaining source stability while having the<br>
&gt;&gt; ability to incorporate more core (and important) language changes<br>
&gt;&gt; that are possibly source-breaking.<br>
&gt;&gt;<br>
&gt;&gt; The Swift team at Apple has reflected on this and decided what it<br>
&gt;&gt; &quot;means&quot; for Swift 3 to be source compatible with Swift 4 and later<br>
&gt;&gt; releases going forward. Our goal is to allow app developers to<br>
&gt;&gt; combine a mix of Swift modules (e.g., SwiftPM packages), where each<br>
&gt;&gt; module is known to compile with a specific version of the language<br>
&gt;&gt; (module A works with Swift 3, module B works with Swift 3.1, etc.),<br>
&gt;&gt; then combine those modules into a single binary. The key feature is<br>
&gt;&gt; that a module can be migrated from Swift 3 to 3.1 to 4 (and beyond)<br>
&gt;&gt; independently of its dependencies.<br>
&gt;&gt;<br>
&gt;&gt; While the exact details of how we will accomplish this feat are<br>
&gt;&gt; still being discussed, here is a sketch of how this will likely work<br>
&gt;&gt; in the Swift 4 timeframe. The key enabler is a new compiler flag<br>
&gt;&gt; that indicates the language version to compile for (e.g., similar to<br>
&gt;&gt; the clang -std=c99 flag). The compiler flag will be provided by the<br>
&gt;&gt; build system you are using (e.g., Xcode, SwiftPM, etc.) on a<br>
&gt;&gt; per-module basis:<br>
&gt;&gt;<br>
&gt;&gt; For language syntax/semantics, the compiler can use the language<br>
&gt;&gt; mode to properly implement the language version being used by a<br>
&gt;&gt; module.<br>
&gt;&gt;<br>
&gt;&gt; For the Standard Library, additive and subtractive changes are<br>
&gt;&gt; easily handled (the former by just adding them, the later by using<br>
&gt;&gt; deprecation techniques). For semantics changes, things are much more<br>
&gt;&gt; complicated, and will need further study.<br>
&gt;&gt;<br>
&gt;&gt; The great thing about this approach is that a single Swift 4<br>
&gt;&gt; compiler is building all of the sources in an application. This<br>
&gt;&gt; allows us to roll out this approach before achieving full ABI<br>
&gt;&gt; stability — something that will be a goal for Swift 4, but is<br>
&gt;&gt; impractical to achieve for a Swift 3.x release. It also provides us<br>
&gt;&gt; a general framework in the future for handling source compatibility<br>
&gt;&gt; as Swift evolves.<br>
&gt;&gt;<br>
&gt;&gt; To make this more concrete, suppose an application is written to use<br>
&gt;&gt; Swift 4, but uses packages via SwiftPM that are written using Swift<br>
&gt;&gt; 3. A single compiler would build both the app and the packages —<br>
&gt;&gt; thus ensuring that all the compiled sources are binary<br>
&gt;&gt; compatible. It would not be the case that a framework built with the<br>
&gt;&gt; Swift 3 compiler could be used by an app built using the Swift 4<br>
&gt;&gt; compiler. That kind of library binary stability (ABI) will be a key<br>
&gt;&gt; goal of the Swift 4 release.<br>
&gt;&gt;<br>
&gt;&gt; These constraints mentioned above will serve as scaffolding for<br>
&gt;&gt; Swift 4 development. Discussion about Swift 4 commences on<br>
&gt;&gt; Monday. Ahead of that, Chris Lattner plans to send out thoughts from<br>
&gt;&gt; the Core team on some of the known key goals (and non-goals) for the<br>
&gt;&gt; release. In the meantime, the focus over the next couple days should<br>
&gt;&gt; be taking stock of what has landed for Swift 3 and to see if any of<br>
&gt;&gt; the proposals mentioned above are close to being completed or are<br>
&gt;&gt; truly out of scope.<br>
&gt;&gt;<br>
&gt;&gt; Thank you again to everyone for making Swift 3 such as fantastic release!<br>
&gt;&gt;<br>
&gt;&gt; Ted<br>
&gt;&gt;<br>
&gt;&gt; _______________________________________________<br>
&gt;&gt; swift-evolution mailing list<br>
&gt;&gt; <a href="mailto:swift-evolution@swift.org" target="_blank">swift-evolution@swift.org</a> &lt;mailto:<a href="mailto:swift-evolution@swift.org" target="_blank">swift-evolution@swift.org</a>&gt;<br>
&gt;&gt; <a href="https://lists.swift.org/mailman/listinfo/swift-evolution" rel="noreferrer" target="_blank">https://lists.swift.org/mailman/listinfo/swift-evolution</a> &lt;<a href="https://lists.swift.org/mailman/listinfo/swift-evolution" rel="noreferrer" target="_blank">https://lists.swift.org/mailman/listinfo/swift-evolution</a>&gt;<br>
&gt;<br>
<br>
--<br>
-Dave<br>
</blockquote></div></div>