I’m very pleased to announce the availability of the F# September 2008 CTP Release, launched via the new MSDN F# Developer Center. This release represents an important step in the evolution of the F# language as we progress it towards a fully supported language for the .NET platform. A huge thank you to both the F# team and the community members who've helped us trial earlier versions of this release and given us so much excellent feedback.
F# is a simple, type-safe, efficient, scalable language for the .NET platform that supports both functional and object-oriented programming. One of the key things about F# is that it spans the spectrum from interactive, explorative scripting to component and large-scale software development. In this release we’ve made major improvements to the language, libraries and tools across this spectrum.
Ø Scripting now has added support, both in the language, compiler and Visual Studio. From simple touches such as “File -> New File -> F# Script” to the improved F# Interactive Tool Window and the new, MSBuild-based resolution rules for assembly references, our aim here is to put nothing between you and your ability to explore a problem space with F#. Jomo Fisher has more on scripting with F#.
Ø The new and improved F# Project system enables large-scale, tool-based software development with F#. Teams can now develop large applications and libraries using standard Visual Studio techniques. This also makes F# easier to approach for developers familiar with Visual Studio. Brian McNamara has more on this.
Ø The new F# Language Service gives more intuitive and reliable intellisense, type tips and smoother background compilation, all essential tools to assist in writing correct software
On the language side, some of the consistent feedback we get about F# is that the combination of type-inferred programming and interactive exploration allows you to develop correct algorithms and objects quickly and with a very low error rate. One of the things we’ve done in this release is to extend the reach of this combination to floating-point intensive domains through Units of Measure Inference and Checking. This allows you to tame the complexity of programs that manipulate floating point numbers representing physical and abstract quantities, without losing any performance in your compiled code. Floating point is an area of programming that has long resisted the benefits of typed programming, and you can think of this feature as providing a type system for floating point numbers. Andrew Kennedy has been a key contributor to this feature and will be following up with a blog series showing how to annotate your types with measure annotations and write code that is generic with respect to units, Luca Bolognese has a blog series showing some applications to financial code, and the F# Samples include a small 2D Solar System simulator using units.
In this release we’ve also continued the work begun in the April Refresh Release to make the F# language and libraries simpler and more regular. We’ve simplified both the F# Reflection and Quotation libraries, making them easier to learn and aligning them with the idioms and metaphors of the .NET Reflection API. We’ve also made some language extensions that simplify the working with object-oriented types in F#, and made the syntax of F# sequence and computation expressions more regular.
Finally, we’re also thinking about the future. As a step towards ensuring that the F# library has a component structure suitable for a maintained, supported release, we’ve split the F# library into two halves. The first is the core component FSharp.Core.dll. When the process of bringing F# to be a supported language completes, this library will version infrequently and have a very high compatibility bar, and will be sufficient to enable idiomatic F# application development. The second is a series of value-add components called the F# PowerPack. The PowerPack includes the FsLex and FsYacc tools, and DLLs for compatibility, math, dynamic execution and query functionality. The PowerPack will see more frequent updates than the core library and is designed to support continued innovation on top of the core F#. It is the F# team's plan of record that the F# PowerPack will be available as a shared source component on CodePlex during the same timeframe we bring F# to supported product quality.
We've also prepared detailed release notes for this release, and please let us know if you spot any issues!
Programming with F# can be enormously fun and rewarding, as well as just plain productive. This is now more true than ever, and we hope you enjoy using F# as much as we do.