> On Feb 7, 2017, at 11:19 PM, Martin Waitz via swift-build-dev > <swift-build-...@swift.org> wrote: > >> The review of SE-0151 “Package Manager Swift Language Compatibility Version" >> begins now and runs through February 13, 2017. The proposal is available >> here: >> >> >> https://github.com/apple/swift-evolution/blob/master/proposals/0151-package-manager-swift-language-compatibility-version.md >> >> <https://github.com/apple/swift-evolution/blob/master/proposals/0151-package-manager-swift-language-compatibility-version.md> Thanks for providing feedback, Martin.
When Swift's source compatibility plan defined (https://lists.swift.org/pipermail/swift-evolution/Week-of-Mon-20161128/029099.html <https://lists.swift.org/pipermail/swift-evolution/Week-of-Mon-20161128/029099.html>), it included the point: > The Swift Package Manager will allow package authors to specify a list of > compatibility modes. This proposal provides a mechanism to implement that point. I believe that the reason this was desired is because we expect that package authors may wish to conditionally adopt new Swift 4 language features without breaking their ability to build with Swift 3, using conditional compilation blocks, e.g. #if swift(>=4.0) // Swift 4 code goes here #endif With this proposal, you can do this by specifying [3, 4], in which case the Swift 4 compiler will compile it as Swift 4 code, and use the code inside the conditional compilation block, while the Swift 3 compiler will also be able to compile it (as Swift 3 code), skipping the conditional compilation block. If you were only able to specify "3" instead, the Swift 4 compiler would pass `-swift-version 3` when compiling this code, and would skip the conditional compilation block. As such it would not be possible to use any Swift 4 language features unless you set your Swift language compatibility version to "4", at which point it could no longer be built by the Swift 3 compiler. - Rick > I’ve one question regarding this proposal: > Why use the list `swiftLanguageVersions` instead of a simple > `swiftLanguageVersion: Int = 3`? > What’s the advantage of being able to specify `[3,4]`? > > If you already have a version 4 compiler, that one will be used anyway and if > the source really is compatible with both versions, > it does not make any difference whether it will be run in version 3 or > version 4 mode. > So just setting it to `3` has the same effect, right? > > I think it’s enough to specify something like „this source is intended to be > compiled in swift version 3 mode“. > Most of the time, that’s all you can specify anyway, because you don’t know > which future versions happen to be compatible.
_______________________________________________ swift-evolution mailing list swift-evolution@swift.org https://lists.swift.org/mailman/listinfo/swift-evolution