-
Notifications
You must be signed in to change notification settings - Fork 830
Description
that's my big question from last standup. If not possible np, but i think it need a discussion at least, because i think is really a good idea for this repo.
Why
make it easier to mantain, contribute ed evolve the FSharp.Core as nuget package
And this repo too (compiler/vs) because less code it's good
about the nuget package
The FSharp.Core nuget package is going to become much more important than before, the gacc'd assembly is from a world without nuget where that assemby was special. It is special, but not too much ( ref corefx libraries ).
It's more easier to let nuget resolve FSharp.Core like every other dependency, than the magic of assembly binding
Also, coreclr is going to reference FSharp.Core as a normal nuget package in projects.
this repo status
This repo is really big: FSharp.Core + compiler + fsi + vs extension.
That mean it's more difficult to make changes, and more difficult to contribute. Build time and test too.
Develop all together helps, yes, but now there is a clear separation of responsabilities.
And the .net ecosystem changed a lot. Nuget, gac, xplat, multiple target ( full, portable, coreclr, mono ), github, etc
compiler/fsi/compilerservice/vs extension are entangled ok, but FSharp.Core is not.
Now for example is difficult to test FSharp.Core with multiple versions of compiler.
If the repo build only the package, it's easy to do a build matrix on compilers ( HEAD, stable, dotnetci, etc ) and easier to do perf testing, lots of pro
pro:
- easier to contribute ( less code )
- easier to test compiler regressions ( build matrix on compiler version, like mono HEAD and stable on fsharp/fsharp )
- build + test suite is faster
- lkg is smaller, just reference a the nuget package
- smaller repo
- a distinct project for issues
cons:
- it's not build together with compiler, but than can be done as testing
possible flow:
- clone this .git repo as fsharpcore
- dont build compiler or use lkg
- use local compiler to build ( a build matrix can help with dotnetci, desktop, mono )
- make all tests pass
- adapt current build script to generate the nuget package only
all that pretty much changing only build the script, because it already works.
After it's ok, we can:
- use nuget FSharp.Core in visualfsharp lkg
- remove unneeded code from both repos
All that without speaking about fsharp/fsharp, i think the split it's a good idea for Microsoft/visualfsharp.
Bonus track
That's another issue, i know, but someone will reply about that so..
The winter is coming, Microsoft team is going to publish a nuget package for FSharp.Core corelcr, and there is already a community FSharp.Core ( thx guys btw, i use it )
It's possible to have a single nuget package with desktopclr+coreclr+mono ? nuget support that, package name matter.
There is already an FSharp.Core package from fsharp/fsharp, and it's possibile to use different packages based on platform (coreclr,desktop, mono) but it's going to be a nightmare of conditionals and versions for users ( and library authors )
If we can split the repo and work together on FSharp.Core to make a single nuget package, is going to be awesome. The compiler can continue to use the same flow with fsharp/fsharp and Microsoft/visualfsharp repos, no need to change that.
Maybe it's possible to fix the politics with a shared ownership (community/microsoft) of the fsharpcore repo?
Just asking, i know is a difficult argument ( strong naming, ownership, maintanance ), but fsharp was the first open source project of MS, last time the bet has paid off well
Without shared ownership, it's possibile to put both version of assemblies (open for mono,etc and desktop/coreclr) in the same package ( it's a zip ) but it's going to be lot of work of coordination and sync.
Maybe is better different nugets, but like that if a project use the community package, and another the microsoft one, nuget maybe can restore all references, but it's a pain for users ( compiler can ignore one of the assemblies )