Tackling the F# Productization

Over the last few months the F# team has been diving deep into the technical work needed to productize F#. In this post I'd like to give a bit of a picture for what that means and how the team has been ramping up on our work.

Firstly, the team! In Cambridge we have myself and James Margetson, and in Redmond we have Luke Hoban, Jomo Fisher, Brian McNamara, Chris Smith, Matteo Taveggia and Santosh Zachariah, with help from Raj Pai, Yasir Alvi, Shri Borde, Dmitry Robsman and Mike Hopcroft who lead up various disciplines (QA, Dev, Program Management) within teams dealing with several .NET languages.

So, what does "productizing F#" really mean? As a language, F# is certainly staying much like it is now: succinct, efficient, expressive, simple-to-use and with good tool support. Fundamentally, productization means more of the same, only better :-) 

At a more concrete level, over the next few weeks we plan to roll out the April Update to the Microsoft Research Release of F# . This release will :

  • contain over 100 bug fixes and feature completions to the core F# language
  • address some language design issues that we'd been putting off for some time
  • be matched by a draft of the F# Language Specification

I've greatly enjoyed working on this release: we've addressed many of the niggling issues that researchers tend to ignore ("Conditional compilation?" Yes! "assert calls System.Diagnostics.Assert?" Naturally! "Why doesn't typeof<_> work in an attribute?" Well, it will now! ) . I'll follow up with more details as we make the release. At this point I want to also say a huge thank you to all those on www.hubFS.net and the F# List who've been so active in reporting issues and helping us really improve the quality of what we have. The F# user community are consistently helpful, friendly and well-informed, and are one of the main reasons why I find working on this language so enjoyable.

Looking beyond that release, Brian McNamara has written up a short summary of our plans for a CTP (Community Technology Preview) this summer and what that is likely to contain. The main features he lists are:

  • Runtime components:
    • fsc.exe, the compiler that knows the F# language
    • fsi.exe, the interactive command environment
    • the F# libraries (usual stuff, ranging from immutable lists to asynchronous computations library)
    • an msbuild task which lets you build an F# ".fsproj" project from the command line
  • Design-time components (Visual Studio 2008 integration):
    • F# language service, which provides syntax highlighting, intellisense, tooltips, etc.
    • F# project system, which enables you to add/remove .fs files, reference dlls, etc.
    • F# interactive window, where fsi is hosted inside Visual Studio

You'll be able to use all this in conjunction by composing these components with versions of Visual Studio such as the freely-available Visual Studio 2008 Shell or with Visual Studio 2008 itself. One of the things we've been investing in heavily is to have Jomo and Brian tackle the job of putting the F# design-time components on a sound engineering footing. This means we're no longer basing the Visual Studio components on the old MyC C++ sample, which was useful originally but had many problems too. Instead we're using VSX (Visual Studio extensibility) available in the Visual Studio SDK.  

So, it's shaping up to be a wonderful year for F#. There's lots of work for us to do, but I'm trust you'll agree it's worth it!