F* – A Proof-Oriented Programming Language
Scope and goals of F*
- Positioned as an ML-like, proof-oriented language with dependent types.
- Emphasizes program verification over pure math formalization.
- Uses SMT solvers plus tactics and metaprogramming.
- Type checking is intentionally powerful/undecidable; supports extensional equality.
- Extracts to “human-readable C” (via the renamed Kremlin → Karamel tool) and also to OCaml and other mainstream targets.
Relationship to F#, OCaml, and other languages
- Syntax and “feel” are OCaml/F#-like; name is historically tied to the “F” lineage (System F, F#, etc.).
- Not a CLR/.NET language by default, though some are interested in .NET integration.
- Compared with SPARK/Ada: F* uses dependent types; SPARK’s contracts can be statically checked too.
- Compared with Coq/NuPRL: stronger focus on compilation and programming, plus SMT integration.
- Compared with Lean: Lean is praised as a language but is currently math-centric; lacks libraries and tactics for large-scale code verification.
Tooling and IDE experience
- Earlier lack of mainstream IDE support was a real adoption barrier.
- Now has VS Code and Emacs modes; some say Copilot works well with it.
- Parallel discussion on F# tooling: modern Ionide/Rider/VS are seen as good, but earlier experiences (especially cross‑platform) were rough.
Real-world use and Project Everest
- F* predates but was heavily advanced by Project Everest.
- Verified components include TLS/QUIC pieces, parsers, and cryptographic primitives.
- These are reported as deployed in Windows kernel, Linux, Firefox, Python, Azure, and embedded crypto.
Practicality of formal verification
- Some doubt feasibility for very large (10M+ LOC) systems; others argue automation and good tactics make large proofs possible in principle.
- Suggested strategy: prove small components, rely on strong encapsulation, and combine proofs with property-based and ordinary tests.
- Lean 4 is seen as usable as a general-purpose language, but currently poor for verifying real-world code due to missing tactic libraries.
Culture, naming, and adoption
- Discussion around renaming “Kremlin” to “Karamel” touches on Soviet/Russian imagery, changing political context, and project branding risk.
- Many commenters are drawn to dependent types “like moths to a flame,” but note that jobs and organizational approval for such languages remain rare.