F# is a programming language that provides support for functional programming in addition to traditional object-oriented and imperative (procedural) programming. The Visual F# product provides support for developing F# applications and extending other .NET Framework applications by using F# code. F# is a first-class member of the .NET Framework languages and retains a strong resemblance to the ML family of functional languages.
F# supports functional programming constructs such as the following:
Functions as values, which enables flexible manipulation of functions. For more information, see Functions as First-Class Values (F#).
Function composition and pipelining, which enables you to combine functions together to create new functions and to simplify the coding of successive operations on data. For more information, see Functions (F#).
Type inference, which reduces the requirement to explicitly call out types without sacrificing type safety.
Automatic generalization, which promotes code reuse by making it easy to write code that works with a variety of different types without any additional effort.
Lambda expressions, which are important to many functional programming constructs.
Partial application of function arguments, which enables you to create new functions implicitly from existing ones. For more information, see Functions (F#).
Code Quotations, a feature that enables you to manipulate F# expressions programmatically.
F# supports object-oriented programming and .NET Framework capabilities such as the following:
The .NET Framework object model, including objects that have properties, methods, and events; polymorphism or virtual functions; inheritance; and interfaces.
Data encapsulation, or separating the public interface of a type from the implementation.
Operator overloading that works well with generics and built-in primitive types.
Type extensions, which enable you to extend an existing type easily without the additional overhead work of creating a new derived type.
Object expressions, which enable you to define small objects implicitly in expressions as needed, instead of declaring a new type and instantiating an object.
Access to the .NET Framework and any managed code assembly.
Access to native code through platform invoke.
F# also supports all the common imperative programming constructs, such as branching and looping constructs.
The Visual F# product also includes an F# library that has many useful functions and types. This includes APIs for collections such as lists, arrays, maps, sets, and sequences. The F# library also supports reflection, events, and formatted I/O.
In addition, the F# library includes support for asynchronous workflows to support parallel computations, and mechanisms for communicating among parallel workflows. For more information, see Asynchronous Workflows (F#), Control.Async Class (F#), and Control.MailboxProcessor<'Msg> Class (F#).
The main F# library is FSharp.Core.dll. Additional libraries are available in the F# PowerPack, which is available on the Microsoft F# Developer Center Web site.
Visual F# provides an interactive window that is integrated into the Visual Studio development environment. This window enables you to enter F# code and have it immediately compiled and executed. This enables you to easily prototype code constructs and test your code while you write it. The interactive window runs the F# interactive tool, fsi.exe, which you can also run from the command line. This feature allows F# to be used as a scripting language. For more information, see F# Interactive (fsi.exe) Reference.
F# is integrated with Visual Studio, and has support for the following:
IntelliSense. For more information, see Using IntelliSense.
Debugging. For more information, see Debugging in Visual Studio.
Deployment. To run F# programs on a computer, you must have the F# runtime components installed. These components are installed by the F# Redistributable Package.
For more information, see F# Development Environment Features.
Provides information about getting started with the current release of V