News

New in Visual Studio F# Tooling: .NET 5 Scripting and F# Interactive

Visual Studio 2019 v16.9 recently shipped with a bunch of new goodies for coders of all kinds, including functional programmers using F#, who likely will be interested in new tooling including .NET 5 scripting and F# Interactive.

Those two related items are among a bevy of other new functionality, tweaks and fixes that came with the debut of VS 2019 v16.9, a servicing baseline release guaranteed to be supported until a year after the next such release.

They are related in that they are both enabled by .NET 5, yet another huge milestone release from Microsoft, this one arriving last November to replace the old, proprietary, Windows-only .NET Framework with a modern substitute featuring cross-platform functionality and open source development. It also began a unification effort to consolidate all the disparate .NET components, frameworks, tooling and so on, which will be completed in November with .NET 6.

In a recent blog post, Microsoft highlighted what's new for F# in the new Visual Studio release, which includes the ability to turn on .NET 5 scripting and the .NET 5-based F# Interactive (executed from the command line with dotnet fsi), which can run F# code interactively at the console or execute F# scripts. "In other words, F# interactive executes a REPL (Read, Evaluate, Print Loop) for the F# language," Microsoft says.

Turning On F# Interactive
[Click on image for larger view.] Turning On F# Interactive (source: Microsoft).

The menu commands Tools > Options > F# Tools > F# Interactive > Use .NET Core Scripting will light it up: F# Interactive's dotnet fsi will process F# code, with all F# scripts behaving like they're running on .NET Core.

That results in this:

  • Packages that require netstandard2.1, netcoreapp3.1, or net5.0 will now work with #r "nuget:..." in F# Interactive from Visual Studio
  • The default set of libraries available to scripts will be .NET 5-based, not .NET Framework-based
  • Any scripts that require .NET Framework to run (e.g., depend on AppDomains) may not work when this is used

As far as the .NET 5 scripting, Microsoft's documentation for F# Interactive says:

Evaluating code interactively in F# Interactive can be a great learning tool, but you'll quickly find that it's not as productive as writing code in a normal editor. To support normal code editing, you can write F# scripts.

Scripts use the file extension .fsx. Instead of compiling source code and then later running the compiled assembly, you can just run dotnet fsi and specify the filename of the script of F# source code, and F# interactive reads the code and executes it in real time.

In the F# productivity department, the dev team highlighted improved Signature Help, an IntelliSense feature. As its name suggests, it displays the signature of a method in a tooltip when a developer types the character that precedes a parameter list, usually an opening parenthesis character. An F# method is a function that is associated with a type. Now Signature Help works with functions in addition to working with methods.

Signature Help for Function Calls
[Click on image for larger view.] Signature Help for Function Calls (source: Microsoft).

"Now, Signature Help can trigger when you're calling an F# function!" said Phillip Carter, program manager, .NET and Languages. "This is a long-requested feature by F# developers. F# function parameters are separated by spaces, so to trigger Signature Help, press the space key. Then you'll see a similar tooltip, but this time for the F# function signature."

Carter also detailed core compiler improvements, more performant and responsive tooling and a whole bunch of code fixes (also enacted in VS Code):

  • Add missing rec keyword
  • Convert C# lambda to F# lambda
  • Add missing fun keyword in F# lambda
  • Remove incorrect use of return keyword
  • Convert record expression to anonymous record
  • Use mutation syntax when a value is mutable
  • Make a declaration mutable
  • Use upcast instead of downcast
  • Add missing = to record, union, or type alias definition
  • Use single = for equality check
  • Use not to negate an expression
  • Wrap expression in parentheses
  • Fix ambiguity between subtraction and negation

Going forward, Carter said the team is looking into:

  • Showing decompiled sources when you invoke Go to Definition on a construct not in your codebase
  • Support for Inline Type Hints when pressing a key command
  • Support for Inline Parameter Name Hints when pressing a key command
  • Improved F# Signature File generation from within Visual Studio
  • Support loading packages that depend on framework references in F# Interactive

"We're also planning out what the next version of the F# language will include to coincide with the .NET 6 release. We hope to have some exciting things to share in the coming months," Carter said.

About the Author

David Ramel is an editor and writer at Converge 360.

comments powered by Disqus

Featured

  • Creating Business Applications Using Blazor

    Expert Blazor programmer Michael Washington' will present an upcoming developer education session on building high-performance business applications using Blazor, focusing on core concepts, integration with .NET, and best practices for development.

  • GitHub Celebrates Microsoft's 50th by 'Vibe Coding with Copilot'

    GitHub chose Microsoft's 50th anniversary to highlight a bevy of Copilot enhancements that further the practice of "vibe coding," where AI does all the drudgery according to human supervision.

  • AI Coding Assistants Encroach on Copilot's Special GitHub Relationship

    Microsoft had a great thing going when it had GitHub Copilot all to itself in Visual Studio and Visual Studio Code thanks to its ownership of GitHub, but that's eroding.

  • VS Code v1.99 Is All About Copilot Chat AI, Including Agent Mode

    Agent Mode provides an autonomous editing experience where Copilot plans and executes tasks to fulfill requests. It determines relevant files, applies code changes, suggests terminal commands, and iterates to resolve issues, all while keeping users in control to review and confirm actions.

  • Windows Community Toolkit v8.2 Adds Native AOT Support

    Microsoft shipped Windows Community Toolkit v8.2, an incremental update to the open-source collection of helper functions and other resources designed to simplify the development of Windows applications. The main new feature is support for native ahead-of-time (AOT) compilation.

Subscribe on YouTube