F* (programming language)
| F* | |
|---|---|
The official F* logo | |
| Paradigm | Multi-paradigm: functional, imperative |
| Family | ML: Caml: OCaml |
| Designed by | Nikhil Swamy, Juan Chen, Cédric Fournet, Pierre-Yves Strub, Karthikeyan Bhargavan, Jean Yang |
| Developers | Microsoft Research, Inria[1] |
| First appeared | 2011 |
| Stable release | v2025.03.25[2]
/ 26 March 2025 |
| Typing discipline | dependent, inferred, static, strong |
| Implementation language | F* |
| OS | Cross-platform: Linux, macOS, Windows |
| License | Apache 2.0 |
| Filename extensions | .fst |
| Website | fstar-lang |
| Influenced by | |
| Dafny, F#, Lean, OCaml, Rocq, Standard ML | |
F* (pronounced F star) is a high-level, multi-paradigm, functional and object-oriented programming language inspired by the languages ML, Caml, and OCaml, and intended for program verification. It is a joint project of Microsoft Research, and the French Institute for Research in Computer Science and Automation (Inria).[1] Its type system includes dependent types, monadic effects, and refinement types. This allows expressing precise specifications for programs, including functional correctness and security properties. The F* type-checker aims to prove that programs meet their specifications using a combination of satisfiability modulo theories (SMT) solving and manual proofs. For execution, programs written in F* can be translated to OCaml, F#, C, WebAssembly (via KaRaMeL tool), or assembly language (via Vale toolchain). Prior F* versions could also be translated to JavaScript.
It was introduced in 2011.[3][4] and is under active development on GitHub.[2]
History
[edit | edit source]Versions
[edit | edit source]Until version 2022.03.24, F* was written entirely in a common subset of F* and F# and supported bootstrapping in both OCaml and F#. This was dropped starting in version 2022.04.02.[5][6]
Overview
[edit | edit source]Operators
[edit | edit source]F* supports common arithmetic operators such as +, -, *, and /. Also, F* supports relational operators like <, <=, ==, !=, >, and >=.[7]
Data types
[edit | edit source]Common primitive data types in F* are bool, int, float, char, and unit.[7]
References
[edit | edit source]- ^ a b Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
- ^ a b Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
- ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
- ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
- ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
- ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
- ^ a b Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
Sources
[edit | edit source]- Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
- Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
- Swamy, Nikhil; Martínez, Guido; Rastogi, Aseem (2024). Proof-Oriented Programming in F*.
External links
[edit | edit source]- High-level programming languages
- Functional languages
- OCaml programming language family
- .NET programming languages
- Microsoft programming languages
- Microsoft Research
- Microsoft free software
- Dependently typed languages
- Automated theorem proving
- Programming languages created in 2011
- Proof assistants
- 2011 software
- Cross-platform free software
- Software using the Apache license
- Statically typed programming languages