F# is an ML language truly at home on .NET with smooth interop with other .NET languages. For example, C# and F# can call each other directly. This means that F# has immediate access to all the .NET Framework APIs, including, for example, WinForms and DirectX. Similarly, libraries developed in F# are available for use from other .NET languages.
F# is also compatible with core Caml; and many Caml libraries and applications can cross-compile either directly or with minor conditionally-compiled changes. This provides an easy path for cross-compiling and/or porting existing Caml code to .NET.
Some F# features:
- F# is the first ML language where all the types and values in an ML program can be accessed from some significant other languages (e.g., C#) in a predictable and friendly way.
- F# was the first released .NET language to produce Generic IL, and the compiler was designed partly with this language in mind. The compiler can also produce (non-generic) v1.0 or v1.1 .NET binaries.
- F# supports features that are often missing from ML implementations such as Unicode strings, dynamic linking, preemptive multithreading and SMP machine support.
F# for developers:
- The interactive environment fsi.exe supports top-level development and exploration of the dynamics of your code and environment.
- The command line compiler fsc.exe supports separate compilation, debug information and optimization.
- F# comes with F# for Visual Studio, an extension to Visual Studio 2003 and Visual Studio 2005 that supports features such as an integrated build/debug environment, graphical debugging, interactive syntax highlighting, parsing and typechecking, IntelliSense, CodeSense, MethodTips and a simple 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 and extends some of 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 very seriously.