Skip to content

Latest commit

 

History

History
242 lines (173 loc) · 10.6 KB

sotu.md

File metadata and controls

242 lines (173 loc) · 10.6 KB

State of the OCaml Ecosystem - August 2015

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

Application Domains


Compilers and Programming Language Tools

Formal Verification

  • 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: ...

Scientific Computing

  • 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: ...

Web Development

  • 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: ...

Mobile Applications

  • Rating: Immature
  • Notable libraries: ...
  • Educational resources: ...

System Programming

  • Rating: Mature

  • Notable libraries:

    • XenServer's XAPI toolstack
    • MirageOS – a library operating system that constructs unikernels
  • Educational resources: ...

Programming ecosystem


Extensions or Replacements to stdlib

  • 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

Algorithms and Data Structures

  • Rating: Mature
  • Notable libraries:
  • Educational resources: ...

Code Analysis and Linters

  • Rating: Immature
  • Notable libraries:
    • OCamlLint: Linter for finding common security and performance problems in OCaml programs.
  • Educational resources: ...

Parallelism and concurrency

  • Rating: Immature
  • Notable libraries:
    • Lwt — A stand-alone monadic cooperative threading library.
    • Async — A monadic cooperative threading library integrated with the Core library.
  • Educational resources: ...

Databases

  • 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: ...

Developer Tools

  • Rating: Immature
  • Notable libraries: ...
  • Educational resources: ...

Graphics

  • Rating: Immature
  • Notable libraries: ...
  • Educational resources: ...

System interaction

  • 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.

Foreign Function Interfaces

User interfaces

  • Rating: Immature
  • Notable libraries:
    • Cmdliner – Cmdliner is a powerful library for defining command line interfaces in a declarative fashion, include the support for subcommands.

Networking

  • Rating: ...
  • Notable libraries: ...
  • Educational resources: ...

Package Management

  • Rating: Mature
  • Notable libraries:
    • opam: very active package manager for OCaml
  • Educational resources: ...

Communication protocols

  • Rating: ...
  • Notable libraries: ...
    • Obus – pure-OCaml (and fast!) implementation of the DBus protocol
  • Educational resources: ...

Data Formats

  • Rating: ...
  • Notable libraries:
  • Educational resources: ...

Serialization

  • Rating: Mature
  • Notable libraries: ...
  • Educational resources: ...

Testing

  • Rating: Mature
  • Notable libraries:
  • Educational resources: ...