F# in Visual Studio 2010 Beta2 is now available ( plus matching F# CTP Update for VS2008)

The latest release of F# is now out! This is included in Visual Studio 2010 Beta2 , released today for MSDN Subscribers, with the matching release of the F# CTP for Visual Studio 2008, and a compiler ZIP for Mono. The detailed release notes are here. (Note: general download availability of Visual Studio 2010 Beta2 will begin in the next few days.)

This is an incremental release, supporting the vision outlined by the F# team, the Microsoft Developer Division and Microsoft Research of including F# as a supported language in Visual Studio. The focus of the release has been to address some design issues necessary to improve F# and put it on a long-term stable, reliable and supported basis.

With this release, we are enabling F# support for multi-targeting with VS2010. This means that VS2010 projects can be targeted to produce binaries for any of .NET 2.0-4.0, for example if you are a library vendor building 2.0 dlls for use on 2.0-4.0, or working in an environment where .NET 2.0-3.5 development is the norm. Additionally, we will be supporting development of F# components targeting Silverlight, through the inclusion of a template for Silverlight library components. In line with the philosophy we outlined in the previous release of F#, we expect the focus of F# in this domain to be components that handle the algorithmic and communication patterns common in client-side programming, particularly in enterprise scenarios.

We have also taken crucial steps towards our goal of ensuring binary compatibility for components across .NET 2.0-4.0. For example, in previous releases different copies of the F# Power Pack were required for .NET 2.0-3.5 and 4.0. However, in this release we have one version of the Power Pack which can be used on both .NET 2.0-4.0 (installed via the CTP MSI or ZIP). If you are authoring F# binary components, you can now build binary compatible components in a similar way (note: some important Beta2 caveats are in the release notes). As we have discussed with the F# community, full ongoing binary compatibility is expected starting with the version of F# that comes with the Visual Studio 2010 RTM release.

At the source level, we are now aiming for no more changes to FSharp.Core.dll before the Visual Studio 2010 RTM release, apart from removing deprecated functionality. Existing F# users should pay careful attention to deprecation warnings since we will be removing deprecated functionality with the version of F# that will come with the Visual Studio 2010 RTM release.

There are also some simplifications to the F# language. For example, the OverloadID attribute is no longer needed when defining method overloads, we have added support for placing definitions in the global namespace and simplified conversion operators such as int32. Some important restrictions have been lifted with regard to object oriented programming, and discriminated unions now have a cleaner code generation pattern when used from other .NET languages. We’ve also made F# programming safer by adding a new feature called equality and comparison constraints used to ensure that F# types such as Map and Set are only used with types supporting the necessary operations. This is documented further in the F# release notes, and an update to the F# language specification will follow in the next week.

This release also includes final, relatively modest improvements to the F# Core Library. These include simplifications to F# asynchronous programming. For example, using asynchronous programming with WPF, Silverlight and ASP.NET components is now even easier, as described in the release notes. We have included the array2D operator for creating 2D arrays. We’ve also addressed version-stable serialization of Map and Set, and aligned F# lazy values and cancellation with the designs of .NET 4.0. F# first class events now support the IObservable interface (new in .NET 4.0, also supported by F# 2.0, and also used by the Reactive Framework). The F# library also includes a modest library of Observable operators, following the pattern of the Event operators already present in F#.

F# now supports reusable script components through the support of #load on .fsx components. By taking the closure of script references, common code can now by factored into reusable .fsx components. These components can be executed with F# Interactive, or compiled with the command line F# compiler.

For F# in Visual Studio, we have addressed a multitude of issues, including F1 support, improvements for the Error List, issues in the Project System and better debugger display of unions and other F# types. For F# documentation, the F# Core Library docs have been integrated into MSDN.

Many thanks to everyone in the F# community for so much great feedback and encouragement during the last few months. The F# core team have worked hard to ensure a good release, and as always we’re very keen to hear your continued feedback. Please report any issues or problems you spot as soon as possible, to ensure we can act on it in time for Visual Studio 2010 RTM! (really, I mean that – try it now, and please send us feedback!)

Don, for the F# team!

Release notes