Skip to content

Conversation

@KevinRansom
Copy link
Contributor

Following the last versioning PR, it became clear that people have learned to apply a strong correlation between the Compiler Version and the F# Language Version.

I.e.
F# Compiler version 3.0 == F# Language 3.0
ditto for 3.1, 4.0 and 4.1

We have decided that we need to break this correlation, since we will be revving the F# language slower than other parts of the Tooling.

To this end we are changing the way we version assemblies and packages.

Assemblies that form part of the integral VS tooling will version to match the VS release they are in:
Ie. FSharp.ProjectSystem.FSharp. FSharp.Editor.dll

Will have the version: 15.6.0.0, 15.7.0.0 etc ...

The tooling will now start from 10.1.0 ... 10.2.0 etc .... far enough away from the F# Language version and the VS tooling versions to not be associated with it.

The Language and FSharp.Core will continue with the 4.4 ... 5.0 branding etc. It will be possible for FSharp.Core to add APIs and there not be a corresponding Language release. We wish to maintain the correlation in FSharp.Core versioning with the Language because of the coupling between the compiler and FSharp.Core.

FSharp.Core will be revved to 4.4.3.0 and the nuget package will be 4.3.0

Fsc and Fsi will display it's version like this:

c:\kevinransom\visualfsharp>release\net40\bin\fsc.exe
Microsoft (R) F# Compiler version 10.1.0 for F# 4.1
Copyright (c) Microsoft Corporation. All Rights Reserved.

error FS0207: No inputs specified

c:\kevinransom\visualfsharp>release\net40\bin\fsi.exe

Microsoft (R) F# Interactive version 10.1.0 for F# 4.1
Copyright (c) Microsoft Corporation. All Rights Reserved.

For help type #help;;

> #quit;;

I think this simplifies our versioning story, and helps you to understand the distinctions in how we version various parts of the toolset.

"4.3.1.0", "4.4.3.0", ["3.3.1.0"; "2.3.5.1"; "3.78.3.1"; "3.259.3.1"; "4.3.1.0"]
"4.4.0.0", "4.4.3.0", ["3.47.4.0"; "3.78.4.0"; "3.259.4.0"; "4.4.0.0"]
"4.4.1.0", "4.4.3.0", ["3.47.41.0"; "3.78.41.0"; "3.259.41.0"; "4.4.0.0"; "4.4.3.0"]
"4.4.1.0", "4.4.3.0", ["3.47.41.0"; "3.78.41.0"; "3.259.41.0"; "4.4.1.0"; "4.4.3.0"]
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

4.4.0.0 should be in this list

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should there be a separate line for 4.4.3.0 in this table?

Copy link
Contributor Author

@KevinRansom KevinRansom Dec 15, 2017

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No to both ...

The correct binding redirects for 4.4.0.0 are produced by this line:
"4.4.0.0", "4.4.3.0", ["3.47.4.0"; "3.78.4.0"; "3.259.4.0"; "4.4.0.0"]

I think the "4.4.1.0" is not needed and the orginal "4.4.0.0" was redundent. I will check it out.

Nope I was wrong, the 4.4.0.0 was redundant but the 4.1.0.0 was needed.

The 4.4.1.0 was needed:

Here is the list of redirects:

      <dependentAssembly>
        <assemblyIdentity name="FSharp.Core" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
        <bindingRedirect oldVersion="2.0.0.0" newVersion="4.4.3.0" />
        <bindingRedirect oldVersion="2.3.0.0" newVersion="4.4.3.0" />
        <bindingRedirect oldVersion="2.3.5.0" newVersion="4.4.3.0" />
        <bindingRedirect oldVersion="4.0.0.0" newVersion="4.4.3.0" />
        <bindingRedirect oldVersion="4.3.0.0" newVersion="4.4.3.0" />
        <bindingRedirect oldVersion="3.3.1.0" newVersion="4.4.3.0" />
        <bindingRedirect oldVersion="2.3.5.1" newVersion="4.4.3.0" />
        <bindingRedirect oldVersion="3.78.3.1" newVersion="4.4.3.0" />
        <bindingRedirect oldVersion="3.259.3.1" newVersion="4.4.3.0" />
        <bindingRedirect oldVersion="4.3.1.0" newVersion="4.4.3.0" />
        <bindingRedirect oldVersion="3.47.4.0" newVersion="4.4.3.0" />
        <bindingRedirect oldVersion="3.78.4.0" newVersion="4.4.3.0" />
        <bindingRedirect oldVersion="3.259.4.0" newVersion="4.4.3.0" />
        <bindingRedirect oldVersion="4.4.0.0" newVersion="4.4.3.0" />
        <bindingRedirect oldVersion="3.47.41.0" newVersion="4.4.3.0" />
        <bindingRedirect oldVersion="3.78.41.0" newVersion="4.4.3.0" />
        <bindingRedirect oldVersion="3.259.41.0" newVersion="4.4.3.0" />
        <bindingRedirect oldVersion="4.4.1.0" newVersion="4.4.3.0" />
      </dependentAssembly>

</trans-unit>
<trans-unit id="9002">
<source>Microsoft Visual F# 4.3</source>
<source>Microsoft Visual F# 10.1 for F# 4.1</source>
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Perhaps the text Visual F# 10.1 should be universally replaced by Visual F# Tools 10.1 just to clarify?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@dsyme

That table doesn't work quite the way you think it does:
this is the list of redirects it will produce:

      <dependentAssembly>
        <assemblyIdentity name="FSharp.Core" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
        <bindingRedirect oldVersion="2.0.0.0" newVersion="4.4.3.0" />
        <bindingRedirect oldVersion="2.3.0.0" newVersion="4.4.3.0" />
        <bindingRedirect oldVersion="2.3.5.0" newVersion="4.4.3.0" />
        <bindingRedirect oldVersion="4.0.0.0" newVersion="4.4.3.0" />
        <bindingRedirect oldVersion="4.3.0.0" newVersion="4.4.3.0" />
        <bindingRedirect oldVersion="3.3.1.0" newVersion="4.4.3.0" />
        <bindingRedirect oldVersion="2.3.5.1" newVersion="4.4.3.0" />
        <bindingRedirect oldVersion="3.78.3.1" newVersion="4.4.3.0" />
        <bindingRedirect oldVersion="3.259.3.1" newVersion="4.4.3.0" />
        <bindingRedirect oldVersion="4.3.1.0" newVersion="4.4.3.0" />
        <bindingRedirect oldVersion="3.47.4.0" newVersion="4.4.3.0" />
        <bindingRedirect oldVersion="3.78.4.0" newVersion="4.4.3.0" />
        <bindingRedirect oldVersion="3.259.4.0" newVersion="4.4.3.0" />
        <bindingRedirect oldVersion="4.4.0.0" newVersion="4.4.3.0" />
        <bindingRedirect oldVersion="3.47.41.0" newVersion="4.4.3.0" />
        <bindingRedirect oldVersion="3.78.41.0" newVersion="4.4.3.0" />
        <bindingRedirect oldVersion="3.259.41.0" newVersion="4.4.3.0" />
        <bindingRedirect oldVersion="4.4.1.0" newVersion="4.4.3.0" />
      </dependentAssembly>

Note that 4.0 will correctly be redirected:

There is no reason for a 4.3 line, because there are no portable profiles.

Sure I can update the text to Visual F# Tools 10.1

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ok, thanks!

@KevinRansom
Copy link
Contributor Author

@dotnet-bot test Ubuntu14.04 Release_fcs Build please

@KevinRansom
Copy link
Contributor Author

@dsyme, @cartermp

Are we going with this versioning scheme, or do we want to have a different one?

@cartermp
Copy link
Contributor

This is the documented plan, as of our discussions last Friday: fsharp/fslang-design#249

Is your PR implementing this?

@KevinRansom
Copy link
Contributor Author

@cartermp yep

FSharp.Compiler.Service.netstandard/pplex.fs
FSharp.Compiler.Service.netstandard/pppars.fs
FSharp.Compiler.Service.netstandard/pppars.fsi

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

+1

@cartermp
Copy link
Contributor

Barring any huge objections from @dsyme, this is indeed what we'll want.

This discussion should be where we chat about FSharp.Core evolution and how it versions as well, which is orthagonal to this PR: fsharp/fslang-design#250

@KevinRansom KevinRansom merged commit e03bc82 into dotnet:dev15.6 Jan 1, 2018
@dsyme
Copy link
Contributor

dsyme commented Jan 12, 2018

@KevinRansom @cartermp Thanks for this, I'm happy :)

@KevinRansom KevinRansom deleted the versioningredux branch May 5, 2018 21:55
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants