This document aims to be a community-driven review of the current state of the OCaml ecosystem and its suitability for various programming domains and tasks. The idea comes from Gabriel Gonzalez's the post about the state of the Haskell ecosystem.
The content is grouped in various sections, each one covering a particular topic, inspired by the structure found in Awesome OCaml.
The topics are roughly sorted from greatest strengths to greatest weaknesses. Each programming area will also be summarized, compared to other languages, by a single rating of either:
- Best in class: the best experience in any language
- Mature: suitable for most programmers
- Immature: only acceptable for early-adopters
- Bad: pretty unusable
-
Rating: Best in class
-
Compilers written in OCaml:
- cDuce - cDuce is a modern XML-oriented functional language with innovative features.
- Compcert C Compiler - It is a C Compiler supporting most of the ISO C90 and C99 / ANSI C features.
- Eff Programming Language - Eff is a functional language with handlers of not only exceptions, but also of other computational effects such as state or I/O.
- Hack Programming Language
- Haxe Programming Language
- Neko Programming Language - Originally the compiler was written in OCaml.
- Mezzo Programming Language - Mezzo is a programming language in the ML tradition, which places strong emphasis on the control of aliasing and access to mutable memory.
- OCaml-Java - OCaml to Java bytecode compiler.
- Rhine – A Lisp on LLVM written in OCaml.
- Rust Programming Language - Originally written in OCaml before bootstrapping.
- Quick C-- Target Language - It is now a dead project. Github Repo. Alternative website.
- Others - Some other compilers implemented in OCaml, quite a few dead now.
-
Parser and Lexer Generators:
-
Articles:
-
Rating: Best in class
-
Notable projects:
- Coq – Coq is a formal proof management system. It provides a formal language to write mathematical definitions, executable algorithms and theorems together with an environment for semi-interactive development of machine-checked proofs.
- Why3 – Why3 is a platform for deductive program verification. It provides a rich language for specification and programming, called WhyML, and relies on external theorem provers, both automated and interactive, to discharge verification conditions.
- Frama-C: static analysis toolbox for the C language
- TLA+: modeling and verification of concurrent and distributed systems
- Astrée: abstract-analysis based program analyzer
- Alt-Ergo – Alt-Ergo is an open-source SMT solver dedicated to the proof of mathematical formulas generated in the context of program verification.
- Zenon: tableau-based prover used in
TLA+
and other projects.
-
Educational resources: ...
-
Rating: Immature
-
Notable libraries:
- Lacaml: OCaml-bindings to BLAS and LAPACK.
- Gsl: Bindings to the GNU Scientific Library.
- Sundials/ML is an interface to the Sundials suite of numerical solvers.
- odepack: Binding to ODEPACK.
- optimization1d: Find extrema of 1D functions.
- Lbfgs: Minimization of multidimensional functions on bounded or unbounded domains. Binding to L-BFGS-B.
- FFTW3: Binding to the famous Fast Fourier Transform library FFTW.
- mesh: Triangular mesh generation and manipulation.
- root1d: Find roots of 1D functions.
- integration1d: Integration of functions of one variable (inspired from QUADPACK).
- nlopt: bindings to the NLOpt optimization library.
-
Educational resources: ...
- Rating: Immature
- Notable libraries:
- COW: Set of tools and syntax extensions for generating and manipulating HTML, CSS, and XML with OCaml.
- Ocsigen: High-level framework for developing client-server applications in OCaml
- BuckleScript: JS compiler
- JS of OCaml (JSOO): Compiler from OCaml bytecode to JavaScript, intended to be used for large, high-performance projects.
- Reason: JavaScript-ish syntax for OCaml.
- Educational resources: ...
- Rating: Immature
- Notable libraries: ...
- Educational resources: ...
-
Rating: Mature
-
Notable libraries:
-
Educational resources: ...
- Notable libraries:
- batteries-included: a community-driven stdlib replacement with many data structures
- Core: JaneStreet's replacement for the stdlib
- containers: modular collection of data structures
- Rating: Mature
- Notable libraries:
- htmt: Hash Array Mapped Tries
- ocamlgraph: powerful graph library
- Educational resources: ...
- Rating: Immature
- Notable libraries:
- OCamlLint: Linter for finding common security and performance problems in OCaml programs.
- Educational resources: ...
- Rating: Immature
- Notable libraries:
- Educational resources: ...
- Rating: Immature
- Notable libraries:
- PG'OCaml: Bindings to the PostgreSQL database
- SQLite3-OCaml: Bindings to the SQLite3 database
- Irmin: A distributed database based on Git, written in OCaml
- Educational resources: ...
- Rating: Immature
- Notable libraries: ...
- Educational resources: ...
- Rating: Immature
- Notable libraries: ...
- Educational resources: ...
- Rating: Mature
- Notable libraries:
- fileutils – File manipulation utilties, such as (recursive) directory removal, and path manipulation.
- ExtUnix – interface to common and platform-specific Unix system functions D-Bus (system libraries)
- Libvirt – a portable toolkit to interact with the virtualisation capabilities of Linux, Solaris and other operating systems.
- Rating: Immature
- Notable libraries:
- Cmdliner – Cmdliner is a powerful library for defining command line interfaces in a declarative fashion, include the support for subcommands.
- Rating: ...
- Notable libraries: ...
- Educational resources: ...
- Rating: Mature
- Notable libraries:
- opam: very active package manager for OCaml
- Educational resources: ...
- Rating: ...
- Notable libraries: ...
- Obus – pure-OCaml (and fast!) implementation of the DBus protocol
- Educational resources: ...
- Rating: Mature
- Notable libraries: ...
- Educational resources: ...