Skip to content

2017 Status and Roadmap for F# and the Visual F# Tools #2400

@cartermp

Description

@cartermp

Current Status of F# and the Visual F# Tools per VS2017 RTM

  • F# 4.1 is feature complete
  • .NET Framework compiler in good shape
  • .NET Framework FSI in good shape
  • .NET Core compiler in RC
    • Type Providers and Codegen from Quotations are not supported due to changes made in reflection APIs for .NET Core. These will be in .NET Core 2.0+ timeframe.
  • .NET Core FSI works as a simple REPL
    • However, it does not support the .NET Core references model and thus does not support #r
  • Visual F# Tools in Visual Studio 2017 is sitting atop Roslyn Workspaces with many new features thanks to the OSS Community
    • It's much easier to add new features to the tooling now
    • However, there are numerous regressions that are going to be fixed
  • Visual FSI window in Visual Studio 2017 is in good shape
  • Debugging is in good shape, with multiple areas of improvement
    • Support for Portable PDBs and Desktop PDBs on .NET Framework
    • Support for Portable PDBs on .NET Core
    • Support for Embedded Portable PDBs on .NET Framework and .NET Core
    • Support for embedded source code with Portable PDBs on .NET Framework and .NET Core
    • Points of significance:
      • Still no Expression Evaluator (EE) for F#, so that means many debugging features are still unavailable as they always have been
      • Regression when debugging F# Lists: the .Items property is not invoked by the Roslyn EE used in Visual Studio
      • No other regressions that we can find
      • Legacy EE will be going away
  • The Visual F# Tools project system does not support F# on .NET Core
    • The new .fsproj file does not load in VS
    • No project system support for package load, cross-platform build, or publish
    • No .NET Core templates in-box
    • This means you can create something with the .NET CLI and have it fail to load in Visual Studio
  • Lightweight Solution Load is not compatible with F# for VS 2017 release.
    • Build/Rebuild/Clean do not work
    • Text searching through any F# projects do not work either.

Immediate Roadmap for 2017

  1. Bug fixes

    • Fixing tooling regressions in VS 2017 tooling
    • Fixing serious bugs in new features in VS 2017
    • Fixing serious bugs in the compiler
  2. Stability

    • It’s crucially important that we get our tooling stability up to spec. Many new features were introduced, but we didn’t increase our test coverage by much.
    • There is currently a bug on our side which prevents the Connected Services node in VS 2017 from working with F# projects.
    • Performance and memory-consumption issues
      • There were regressions here introduced in VS 2017 compared with VS 2015. It will be an ongoing battle to improve this, but we’ve already seen big improvements from Don just recently.
    • Build/Rebuild/Clean and Text Search do not work if Lightweight Solution Load is turned on. We’ll work with the team that owns this to get this fixed.
  3. Migrate the OSS Build to the latest .NET CLI and MSBuild and use the Multilingual App Toolkit (MAT) for localization builds

    • Migrating OSS Build to latest .NET CLI and MSBuild is necessary for .NET Core 2.0 support, which is in turn necessary to get Type Providers, Quotation support, and #r support in F# for .NET Core
    • Using the MAT will also bring down our internal build times for signed binaries tremendously
  4. Support generating signed VSIXs of the latest master build, pushed directly to MyGet

    • This will enable people to get on a “Fast track” for F# tooling in VS 2017, test out brand-new features, and provide feedback early on
    • The artifacts produced will come with the assumption that people know they won’t be as well-tested and may introduce regressions
  5. Project System support for .NET Core and .NET Standard projects in F#

    • Ability to load MSBuild 15-based .fsproj projects
    • Add gestures for cross-platform builds, publish, and adding package references
    • Consideration: Roslyn Project System
      • Add F# support to the new project system that C# and VB use for .NET Core/Standard projects
      • Remove our own project system entirely, making us “first-class” in that regard
      • This is pending an investigation into the work involved
  6. Full FSI support on .NET Core 2.0

    • Properly handle the model for how .dlls are laid out on disk with .NET Core, thus fixing #r
    • Establish a good working model for how to do the above
    • Prompt to re-load an FSI session when #r’ing an assembly that targets a higher target than what FSI was launched with?
      • Error message asking user to re-load FSI manually?
      • Try to re-target and re-reference everything on the fly?
  7. Full support for F# on .NET Core 2.0 and .NET Standard 2.0

    • Type Providers and Code Quotations
    • This also takes a dependency on RefEmit. We’ll need to investigate this further, since it’s currently not on the .NET Core 2.0 roadmap
  8. Build a Contract .dll between Roslyn and F# to remove our use of InternalsVisibleTo

    • This will allow Roslyn to determine when they break us if they make any breaking changes to their APIs
    • This will be a big improvement over the current situation, where we must manually check this
  9. OSS Engineering Efficiency and Build needs some improvements

    • The .NET CLI does not use project.json anymore, but our OSS Build still relies on that
    • The .NET CLI uses MSBuild 15 and PackageReferences, which we need to support
    • Open Source Localization is needed to simplify our localization process and more easy leverage the OSS community
      • Using the Multilingual App Toolkit is a way to improve our internal process and reduce build times

In accordance with the above, what follows is where we expect work will come from. In the case of the OSS Community, while we don't assume work will be done for us, we anticipate continuing to receive high-quality contributions which we will gladly accept.

@KevinRansom

  • VS support for loading .NET Core 1.x projects in Visual Studio
    • This is an issue being addressed in the short-term
  • F# Compiler support for .NET Core 2.0
  • FSI support for .NET Core 2.0
  • Type Provider and Code Quotations support for .NET Standard 2.0
  • System.ValueTuple work to deal with its migration to mscorlib in .NET Framework 4.6.3
  • Helping with concrete work in evolving F# 4.2
  • Bug fixes in the compiler, PDBs, debugging, and platform support

@brettfo

  • Bug fixes in the VS Tooling
    • Addressing regressions and serious bugs in new features
    • Connected Services Node bug and other issues with VS features
  • Addressing the OSS Build
  • Getting our internal builds to a place where we can publish signed VSIXs for people to use
  • Addressing Localization
    • Using the Multilingual App Toolkit to reduce build times and remove our internal clone of this repo
    • Improve OSS Localization
  • Investigating F# support on the Roslyn Project system, and acting on that if it's deemed reasonable
  • Support the community

@cartermp

  • Blog post with a focus on OSS attribution for F# 4.1 and the Visual F# Tools in VS 2017
  • Outreach to internal teams to address issues that affect us
  • Support the community
  • Low-impact bug fixes, if possible

@dsyme and the F# OSS Community

  • F# 4.2 evolution
  • Additional IDE features and improvements
  • Performance improvements
  • Bug fixes (note: this does not mean that we are punting bug fixes to the community. It means we will accept any bug fixes from the community)

Roslyn Team

  • Helping us and the OSS community better understand Roslyn when working on features
  • Engaging with and helping unblock the OSS community

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions