-
Notifications
You must be signed in to change notification settings - Fork 831
Closed
Labels
Milestone
Description
See https://github.com/fsharp/fslang-design/blob/master/tooling/FST-1004-versioning-plan.md
This is a more detailed breakdown and tracking issue for #4112.
We have strong motivation to decouple versioning of the F# compiler and tools from the F# language and core library. We also wish to keep the F# language and F# Core library coupled in version numbers. The reasoning is as follows:
- The F# major language version number will change more and more slowly over time. Proposed and approved new features still fit snugly in the minor version number.
- The F# minor language version is expected to change, but not as often as tooling and SDK versions.
- Decoupling the FSharp.Compiler.Service version from the language version has proven to be a good thing, as it has allowed the adoption of SemVer and rapid iteration. A similar model can be applied for the F# compiler and tooling.
- Coupling the compiler version with the language version is not always done in other languages (e.g., C#), and such decoupling hasn't been a problem.
Here's what it should look like:
| Visual Studio version | 15.5 (current) | 15.6 | 15.7 | vNext |
|---|---|---|---|---|
| F# language version | 4.1 | 4.1 | 4.4 | 4.x |
| FSharp.Core version | 4.4.1.0 | 4.4.3.x | 4.4.4.x | 4.4.x.y |
| FSharp.Core NuGet package version | 4.2.x | 4.3.x | 4.4.x | 4.x.y |
| F# compiler banner | F# Compiler 4.1 | F# Compiler 10.x.y for F# 4.1 | F# Compiler 11.x.y for F# 4.4 | F# Compiler XX.y.z for F# 4.x |
| VS product Name | Visual F# 4.1 | Visual F# 10.x.y for F# 4.1 | Visual F# 11.x.y for F# 4.4 | Visual F# XX.y.z for F# 4.x |
| VS product details | Microsoft Visual F# 4.1 | Microsoft Visual F# 10.x.y for F# 4.1 | Microsoft Visual F# 11.x.y for F# 4.4 | Microsoft Visual F# XX.y.z for F# 4.x |
| F# SDK version | 4.1 | 10.x | 11.x | ZZ.x |
| F# Compiler .dll version | 4.4.1.0 | 10.x.y.z | 11.x.y.z | WW.x.y.z |
| FSharp.Compiler.Tools version | 4.1.x | 10.x.y for F# 4.1 | 11.x.y for F# 4.4 | XX.y.z for F# 4.x |
| VS Assembly versions | 15.4.x.y | 15.6.x.y | 15.7.x.y | vNext.x.y |
You'll note a few things:
- There will be no F# 4.2 or F# 4.3 language version - it will skip to F# 4.4. This is because it will bring the F# language, FSharp.Core, and FSharp.Core NuGet package back into sync.
- The Compiler and SDK version will start at 10.x.y, and so on. This is to ensure that the F# language version will never catch up, and lets us start on the path of SemVer.
- Visual Studio assembly versions will match the VS release. It should be plainly obvious if an assembly is a part of Visual Studio this way.
- FSharp.Compiler.Service is not a part of this plan. Given that it has already been on this separate versioning path, and may need to version independently of the assets Microsoft produces for a number of reasons, we intend on keeping it as-is.
We believe that this will make versioning a bit more sane moving forward, as it gives us the ability to rev tooling at a faster pace than the language, while also laying out a plan to align F# language versions, FSharp.Core versions, and FSharp.Core NuGet package versions.