Search This Blog

2009-07-09

F# As a Language and F# for Developers

F# includes support for the foundational features of functional programming including tuples, lists, options, function values, local function definitions, pattern matching and sequence expressions.

The powerful type inference mechanisms of F# allow code to be both succinct and yet fully type-checked.

F# also includes support for advanced functional programming constructs such as active patterns and computation expressions. Computation expressions can be used to express data queries and client/server modalities in AJAX-style web programming. They enable programmers to write succinct and robust reactive agents through the use of asynchronous workflows. Computation expressions are related to ``monads'' in Haskell.

F# embraces object-oriented programming and includes support for type-inferred, succinct descriptions of object types.

F# allows types and values in an F# program to be accessed from other .NET languages in a predictable and friendly way.

F# includes support for a form of meta-programming, inspired by LINQ. This allows data queries to be expressed and type-checked in F# code and then dynamically compiled and translated to target languages such as SQL using the LinqToSql framework.

F# fully supports .NET generics and the language was designed partly with this in mind.

Through .NET, F# supports advanced language and runtime features such as Unicode strings, dynamic linking, preemptive multithreading, and SMP support.

F# for Developers:

The F# Interactive environment fsi.exe supports top-level development and exploration of the dynamics of your code and environment.

F# comes with Visual Studio integration that supports features such as an integrated build/debug environment, graphical debugging, interactive syntax highlighting, parsing and typechecking, IntelliSense, CodeSense, MethodTips and a project system.

F# can be used with tools from the .NET Framework, Microsoft's Visual Studio and many other .NET development tools.

F# comes with an ML compatibility library that approximates the OCaml 3.06 libraries. This means you don't have to use .NET libraries if it is not appropriate. It is possible to write large and sophisticated applications that can be cross-compiled as OCaml code or F# code, and we take this mode of use seriously.