Hi All,

(Cross-posted from swift-evolution)

Does anyone have feedback before this becomes the plan of record for Swift 3.x 
and Swift 4?  The Apple team has reviewed this already but I wanted to make 
sure we didn’t miss some important cases.

Thanks,
Ewa

> On Dec 1, 2016, at 2:40 PM, ematej...@apple.com wrote:
> 
> Hi,
> 
> (I already sent this to swift-evolution yesterday but cross-posting.)
> 
> One of the Stage 1 goals of Swift 4 is source compatibility with Swift 3, but 
> what does that precisely mean and how will we determine if the goal is 
> achieved?  This is the current proposal of how this goal ties back to the 
> Swift 3.x and Swift 4 releases.  Is there anything else that’s missing or 
> should be discussed?
> 
> 
> The source compatibility goal for Swift 4 means that sources that previously 
> compiled with the Swift 3 compiler will continue to compile with no source 
> modifications with the Swift 3.x and Swift 4 compilers.  
> 
> Swift 3.x releases have the goal of source compatibility with Swift 3.  This 
> is the default mode and there is no compatibility flag.  
> This means that Swift 3 code should be able to build with the Swift 3.x 
> compiler without modification as much as practically possible. The same 
> applies to SwiftPM packages with Swift 3 source code.  
> Swift 3.x code will not necessarily compile with the Swift 3 compiler.  For 
> example, new language features could be added.
> 
> The Swift 4 compiler will include a language compatibility flag 
> -swift-version that accepts 3 or 4 as arguments and controls the 
> compatibility mode (SR- 2582 <https://bugs.swift.org/browse/SR-2582>).
> The -swift-version 3 compatibility mode has the goal of source compatibility 
> as much as practically possible with Swift 3.x (including 3, 3.0.x, 3.x). 
> The -swift-version 4 compatibility allows approved source code breakages from 
> Swift 3.x (including 3, 3.0.x, 3.x).  Proposed source breaking changes should 
> be discussed on swift-evolution and highlighted in evolution proposals.
> All the sources in a module (e.g,  SwiftPM packages, targets in Xcode) will 
> be built in the same compatibility mode, but modules built with different 
> compatibility modes can be linked into a single binary and will interoperate. 
> Thus a module can be migrated from Swift 3 to 3.x to 4 independently of its 
> dependencies.
> The Swift Package Manager will allow package authors to specify a list of 
> compatibility modes.
> The Swift compiler already provides a mechanism for conditional compilation 
> based on the compiler version with the #if swift syntax. SE-0020 
> <https://github.com/apple/swift-evolution/blob/master/proposals/0020-if-swift-version.md>.
>   Swift 4 will also provide mechanisms to conditionalize code based on the 
> compatibility version. 
> The @available(...) attribute has been expanded to support the swift language 
> version with SE-0141 
> <https://github.com/apple/swift-evolution/blob/master/proposals/0141-available-by-swift-version.md>.
>  For example, @available(swift 3).
> 
> Maintaining source compatibility with Swift 3 in practice while continuing 
> development is not always clear-cut.  It often comes down to tradeoffs.  
> Let’s review a few cases.
> New features may become available if they do not take up syntactic space that 
> might be commonly used by existing Swift code. 
> If a bug fix breaks source in a fringe case as determined by a scan of 
> existing source, the benefit might outweigh the cost and it could be allowed.
> Changes to existing APIs have high bar to clear as they should provide a 
> significant benefit to clients and have minimal impact on existing, real-life 
> code.  These changes should be considered for inclusion in the -swift-version 
> 4 compatibility mode of the Swift 4 compiler instead.
> New warnings are allowed because they do not require source code changes.
> To summarize, any proposed source breakage from Swift 3 for the Swift 3.x 
> compilers or the -swift-version 3 compatibility mode of the Swift 4 compiler, 
> should be small in scope of code affected and weighed against the goals of 
> source compatibility described above. It should be approved on 
> swift-evolution. 
> 
> For Apple Platforms, source compatibility can also be affected by changes to 
> the Apple SDKs.  Last year, Swift 2.3 required a migration from Swift 2.2 to 
> account for changes in the SDKs even though no language changes were 
> introduced.  This year, source compatibility is defined more strictly to 
> require that the Apple SDKs only add source compatible changes when used with 
> the Swift 3.x compilers or when used with the Swift 3 compatibility mode 
> (-swift-version 3) in the Swift 4 compiler.  The  ‘API notes’ feature has 
> been augmented and can now express how an API is imported for a specific 
> Swift version.  This feature allows the view of the evolved Apple SDKs to 
> stay the same as with Swift 3 when Swift 3 source compatibility is expected.
> 
> 
> Thanks,
> Ewa

_______________________________________________
swift-dev mailing list
swift-dev@swift.org
https://lists.swift.org/mailman/listinfo/swift-dev

Reply via email to