# What is F#?

Completed

F# is an open-source, cross-platform programming language that makes it easy to write succinct, performant, robust, and practical code.

F# runs anywhere .NET runs and in cases where your application needs to run in a JavaScript environment, there are various libraries you can use to convert your F# code into JavaScript.

F# has numerous features that include:

• Lightweight syntax: Write low-ceremony code and focus on the core logic of your application.
• Type inference and automatic generalization: Leverage the compiler to get the benefits of a statically typed language without explicitly defining your types.
• Immutable by default: Apply predictable & repeatable transformations to your data without worrying about side-effects.
• Powerful data types: Represent complex data & model domains using tuples, records, and discriminated unions.
• Pattern matching: Enforce correctness in your application's behavior using the compiler.
• Asynchronous programming: Support for asynchronous workflows out of the box.

## Why F#?

There are many language features and aspects of the F# language that make it easy to be productive when writing code:

• Succinct: You write less code with F# that's also expressed in a clear manner.
• Performant: F# comes with built-in parallelism and concurrency. It also uses the fact that it's part of the .NET runtime to speed things up.
• Robust: There are language constructs that make the code fault tolerant and robust like immutable by default, null value management and more.
• Supports multiple programming paradigms: F# lets you choose the patterns and practices most effective for solving problems by providing strong support for functional and object programming paradigms.

### Succinct

Writing less code not only cuts down on your development time, but it also makes your code easier to read and test.

• Type inference: As a result of its strong type system, the F# compiler is able to analyze your code and infer the data types you're working with without explicitly defining them.
• Lightweight syntax: F# lets you be productive without writing too much boilerplate code. Its lightweight syntax lets you focus on the core components of your application.

### Performant

As the demands on your application grow, writing scalable code to meet those demands is hard. F# simplifies the process of writing scalable code by building on top of a performant runtime and having parallelism and concurrency built into the language.

• Built-in parallelism & concurrency: F# has language features like async expressions that simplify the process of writing concurrent code to safely make the most of your compute resources.
• Leverage the performance of the .NET Runtime: The .NET runtime is able to efficiently handle large workloads across a wide range of deployment targets.

### Robust

Writing code that's unreliable can be costly. When you develop applications, you want to make sure that they stand the test of time. F# helps you write robust code by making the expected outcomes predictable and reproducible. Using world-class tooling and libraries you can catch and handle those edge-cases before your users do.

• Immutable by default: Having immutability by default means you can process your data without changing the original data throughout the execution of your program. Therefore when applying changes to your data you have a high degree of certainty of the expected outcome making code simpler to reason about and test.
• Null value handling: Errors in an application due to null values can be costly. As a result, code bases can often be riddled with code to check for and handle null values. In F#, you can use the Option type to safely handle scenarios where null values may arise.
• Professional-grade tooling: Use lightweight text editors such as Visual Studio Code or an IDE like Visual Studio.
• Works with .NET libraries: The .NET ecosystem has a rich ecosystem of libraries. As a .NET language, F# can take advantage of those libraries and use them inside your applications.