• en

OCaml Planet

The OCaml Planet aggregates various blogs from the OCaml community. If you would like to be added, read the Planet syndication HOWTO.

937 blog posts are available. You can read the 30 more recent ones below or view older ones.

Weekly News — OCaml Weekly News, Aug 25, 2015

Tenth OCaml compiler hacking evening and OCaml/ML talks — OCaml Labs compiler hacking ( (OCaml Labs), Aug 20, 2015

We'll be meeting in the Computer Lab next Friday (28th August 2015) for another evening of compiler hacking. All welcome!

We'll also be having an afternoon of OCaml- and ML-related talks beforehand, with titles suspiciously similar to talks at the ML Workshop and OCaml Workshop the following week.

If you're planning to come along to either the talks or to compiler hacking, please add yourself to the Doodle poll. Further updates, if any, will be posted to the compiler hacking mail…


No (functional) experience required — Jane Street (Yaron Minsky), Aug 19, 2015

Jane Street is a serious functional programming shop. We use OCaml, a statically typed functional language for almost everything and have what is probably the largest OCaml codebase anywhere.

This leads lots of people to think that they shouldn't even bother applying, under the assumption that we are only interested in hiring deep functional programming gurus. I think people get to this conclusion in part because they think of functional languages, especially those with fancy type systems, as ar…


Haskell Engineer at Wagon (Full-time) — Functional Jobs (FunctionalJobs.com), Aug 18, 2015

We’re a team of functional programmers writing apps and services in Haskell (and Javascript). Yes, it’s true: Haskell is our main backend language. We also use functional programming practices across our stack.

Wagon is a great place to do your best work. We love to teach and learn functional programming; our team is humble, hard working, and fun. We speak at the Bay Area Haskell Meetup, contribute to open source, and have weekly lunches with interesting people from the community.


Announcing Lambdoc 1.0-beta4 — Dario Teixeira, Aug 17, 2015

I'm happy to announce the release of version 1.0-beta4 of Lambdoc, a library providing support for semantically rich documents in web applications. Though Lambdoc was designed with Ocsigen/Eliom integration in mind, it does not actually depend on the Ocsigen server or Eliom, and you may use it with other frameworks. In fact, you may find it useful outside the web application domain altogether.

An overview of Lambdoc's features may be found in previous posts announcing the beta1 and beta3 rel…


Just-in-Time Summoning of Unikernels (v0.2) — Magnus Skjegstad, Aug 17, 2015

Jitsu - or Just-in-Time Summoning of Unikernels - is a prototype DNS server that can boot virtual machines on demand. When Jitsu receives a DNS query, a virtual machine is booted automatically before the query response is sent back to the client. If the virtual machine is a unikernel, it can boot in milliseconds and be available as soon as the client receives the response. To the client it will look like it was on the whole time.

Jitsu can be used to run microservices that only exist after they…


Summer Ocsigen releases — Ocsigen blog (Gabriel Radanne), Aug 17, 2015

We are happy to announce the releases of

We also welcome a new member in the ocsigen team, Vasilis Papavasileiou.

Key changes in the various releases:

  • PPX support for js_of_ocaml with OCaml >= 4.02.2. See documentation here.

    This was also the occasion to introduce a new syntax for object literals, and to improve the Camlp4 syntax (w.r.t. to locations). Both syntaxes emit the same code, and are perfectly compatible.


Merging OCaml patches — GaGallium (Gabriel Scherer), Aug 07, 2015

In Merging OCaml Patches I wrote a description of my personal process to merge OCaml patches (usually submitted as github pull requests) in the upstream repository (currently SVN). This description may be useful for external contributors to understand the process, and maybe meet me halfway by doing a bit of the work upfront.

In particular, as an external contributor, you

  • must add tests to the testsuite,
  • should write a proper changelog entry,
  • should rebase your PR into a good patch series …

OCaml Compiler Hacking: how to add a primitive — Cedeela (simon), Aug 06, 2015

I have been hacking on the OCaml compiler recently; in particular, I added some support for coloring warning/error messages. At some point during the discussion over this pull request, it became clear that colored output should only be enabled if stderr was an interactive terminal (in opposition to a regular file handle or whatnot). The compiler does not link with the Unix library, so I finally decided to add a primitive caml_sys_is_interactive. My purpose here is to explain how it works (from w…


Provably considered harmful — Andrej Bauer, Aug 05, 2015

This is officially a rant and should be read as such.

Here is my pet peeve: theoretical computer scientists misuse the word “provably”. Stop it. Stop it!

Theoretical computer science is closer to mathematics than it is to computer science. There are definitions, theorems and proofs. Theoretical computer scientists must understand mathematical terminology. The words “proof” and “provable” are in the domain of mathematical logic. A statement is provable if it h…


Release of OCaml-bitcoin 2.0 — OCamlCore Forge News ( (Dario Teixeira), Aug 05, 2015

This new release brings the API up-to-date with the latest versions of Bitcoin Core. It also features two new optional backends based on Cohttp and OCurl (contributed by Vincent Bernardoff). Finally, note that the code is now licensed under the LGPL 2.1 (W.O.L.E.).

Full Time: Software Developer (Functional Programming) at Jane Street in New York, NY; London, UK; Hong Kong — GitHub Jobs, Aug 03, 2015

Software Developer

Jane Street is a proprietary quantitative trading firm, focusing primarily on trading equities and equity derivatives. We use innovative technology, a scientific approach, and a deep understanding of markets to stay successful in our highly competitive field. We operate around the clock and around the globe, employing over 400 people in offices in New York, London and Hong Kong.

The markets in which we trade change rapidly, but our intellectual approach changes faster still…


Software Engineer, OCaml at Pegged Software (Full-time) — Functional Jobs (FunctionalJobs.com), Aug 03, 2015

Pegged is seeking passionate, collaborative, entrepreneurial engineers to help us transform and equalize how people are hired. We’re a small, early-stage, high-growth company that cares about producing a valuable product, growing together and using the right tool for the job. We are hiring at all levels of experience at our New York City and Baltimore offices.

Pegged Software is fixing how people get hired. We do this by applying modern data science to build predictive models that match i…


Formally verifying the complexity of OCaml programs with CFML -- part 3 — GaGallium (Armaël Guéneau), Aug 03, 2015

In two previous blog posts (part 1 and interlude), I presented a set of notions to prove asymptotic complexity of OCaml programs, then an OCaml implementation of Okasaki's "binary random access lists". In this last blog post, I combine the two ideas, and present a formalization of binary random access lists, using CFML.

A too simple example

As an appetizer, let's try to prove the specification "with big-O" for the incr function, of the first blog post:

Lemma incr…

Intermediate truth values — Andrej Bauer, Jul 30, 2015

I have not written a blog post in a while, so I decided to write up a short observation about truth values in intuitionistic logic which sometimes seems a bit puzzling.

Let $\Omega$ be the set of truth values (in Coq this would be the setoid whose underlying type is $\mathsf{Prop}$ and equality is equivalence $\leftrightarrow$, while in HoTT it is the h-propostions). Call a truth value $p : \Omega$ intermediate if it is neither true nor false, i.e., $p \neq \bot$ and $p \neq \top$. Such a R…


Formally verifying the complexity of OCaml programs with CFML -- interlude — GaGallium (Armaël Guéneau), Jul 30, 2015

This small interlude post is not about Coq nor CFML: I present a data structure from Okasaki's Purely functional data structures, implemented in OCaml.

It comes as a preliminary explanation for an incoming formalization of it in CFML (see next post), including an complexity analysis!

The structure we decided to study is Okasaki's "binary random access list". It is a functional data structure, which features usual list operations (cons and uncons for adding and removing an …


Welcome to the Ocsigen Blog! — Ocsigen blog (The Ocsigen Team), Jul 29, 2015

The Ocsigen project finally has a blog. We are planning to publish news from the wider Ocsigen community, tutorials, and more.

Ocsigen encompasses the building blocks that you need in order to efficiently develop Web applications in OCaml. Among other libraries and tools, Ocsigen provides:

  • js_of_ocaml, which is a compiler from OCaml to JavaScript;

  • Ocsigen Server, which is a web server implemented in OCaml;

  • Lwt, which is a cooperative thread library for OCaml;


Weekly News — OCaml Weekly News, Jul 28, 2015

  1. Introduction to Functional Programming in OCaml, a MOOC
  2. Comparing floats
  3. Clever typing for client-server communication?
  4. Call for participation: ML 2015
  5. Released: OCaml version 4.02.3
  6. Other OCaml News

Fun With Opam: Advice to My Past Self — Mindy Preston, Jul 27, 2015

Most instructions on how to get started with OCaml packages now advise the user to get started with opam, which is excellent advice. Getting up and running with opam is pretty easy, but I wasn’t sure where to go from there when I wanted to modify other people’s packages and use the modifications in my environment. I wish I’d realized that the documentation for making packages has a lot of applicable advice for that use case, as well as the apparent target (making your own packges from scra…


OCaml 4.02.3 released — Caml INRIA, Jul 27, 2015

Organized chaos: managing randomness — Open Mirage (David Kaloper), Jul 22, 2015

This post gives a bit of background on the Random Number Generator (RNG) in the recent MirageOS v2.5 release.

First we give background about why RNGs are really critical for security. Then we try to clarify the often-confused concepts of "randomness" and "entropy", as used in this context. Finally, we explore the challenges of harvesting good-quality entropy in a unikernel environment.

Playing dice

Security software must play dice.

It must do so to create secrets, for…


Weekly News — OCaml Weekly News, Jul 21, 2015

  1. looking for "real world" sqlite3 examples
  2. OCaml 4.02.2 and 4.02.3
  3. Other OCaml News

Building the LLVM Fuzzer on Debian. — Erik de Castro Lopo, Jul 21, 2015

I've been using the awesome American Fuzzy Lop fuzzer since late last year but had also heard good things about the LLVM Fuzzer. Getting the code for the LLVM Fuzzer is trivial, but when I tried to use it, I ran into all sorts of road blocks.

Firstly, the LLVM Fuzzer needs to be compiled with and used with Clang (GNU GCC won't work) and it needs to be Clang >= 3.7. Now Debian does ship a clang-3.7 in the Testing and Unstable releases, but that package has a bug (#779785) which means the…


OCaml server-side developer at Ahrefs Research (Full-time) — Functional Jobs (FunctionalJobs.com), Jul 20, 2015

Who we are

Ahrefs Research is a San Francisco branch of Ahrefs Pte Ltd (Singapore), which runs an internet-scale bot that crawls whole Web 24/7, storing huge volumes of information to be indexed and structured in timely fashion. On top of that Ahrefs is building analytical services for end-users.

Ahrefs Research develops a custom petabyte-scale distributed storage to accommodate all that data coming in at high speed, focusing on performance, robustness and ease of use. Performance-critical low…


Introducing Incremental — Jane Street (Yaron Minsky), Jul 18, 2015

I'm pleased to announce the release of Incremental (well commented mli here), a powerful library for building self-adjusting computations, i.e., computations that can be updated efficiently when their inputs change.

At its simplest, you can think of a self-adjusting computation as a fancy spreadsheet. In a spreadsheet, each cell contains either simple data, or an equation that describes how the value in this cell should be derived from values in other cells. Collectively, this amounts to a graph…


Formally verifying the complexity of OCaml programs with CFML -- part 1 — GaGallium (Armaël Guéneau), Jul 18, 2015

In a recent paper, Arthur Charguéraud and François Pottier present a formal proof of an OCaml implementation of Tarjan's union-find algorithm. The proof covers two aspects: first, functional correctness ("the algorithm is correct"), but also asymptotic complexity. For example, one of the results of the paper is that the link function runs in \(O(α(n))\) elementary steps, \(α\) being the inverse of the Ackermann function.

Actually, the complexity results of the paper are no…


Weekly News — OCaml Weekly News, Jul 14, 2015

  1. stog 0.15.0 and friends
  2. Native compiler for oCaml on System Z
  3. mqueue 0.5.3
  4. Scanning objects outside the OCaml heap
  5. Other OCaml News

ocaml-fileutils 0.5.0 released — OCamlCore Forge News ( (Sylvain Le Gall), Jul 13, 2015

A new version of ocaml-fileutils has been published. OCaml Fileutils provides functions to manipulate files (like rm, cp, touch, find, mv, which) and filenames. The library is pure OCaml and as much as possible portable. The release: https://forge.ocamlcore.org/frs/shownotes.php?release_id=1154 More information: http://ocaml-fileutils.forge.ocamlcore.org/

Converting a code base from camlp4 to ppx — Jane Street (Jeremie Dimino), Jul 08, 2015

As with many projects in the OCaml world, at Jane Street we have been working on migrating from camlp4 to ppx. After having developed equivalent ppx rewriters for our camlp4 syntax extensions, the last step is to actually translate the code source of all our libraries and applications from the camlp4 syntax to the standard OCaml syntax with extension points and attributes.

For instance to translate code using pa_ounit and pa_test, we have to rewrite:

TEST = <:test_result< int >> ~exp…

Weekly News — OCaml Weekly News, Jul 07, 2015

  1. oloop 0.1.0
  2. PhD position announcement: Timed contracts for Correct-by-Construction system design
  3. Core Suite 112.35.00
  4. looking for "real world" sqlite3 examples
  5. Incremental 112.35.00
  6. Other OCaml News

View older blog posts.