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

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

Senior Haskell / Full Stack Developer at PRODA Ltd (Full-time) — Functional Jobs (FunctionalJobs.com), Feb 14, 2019

Position summary

We are looking for a full-time senior software engineer to join our team in London or work remotely.

We want you to be someone who is looking to really help shape the future of the development team, have real impact on strategy, architecture and be the lead on our most important projects.

You will expand PRODA's capabilities in data ingestion, data exports, data standardisation and machine learning. We work in a functional programming stack in Haskell and Elm, together w…


Full Stack Software Engineer (Haskell experience preferred) at Interos Solutions (Full-time) — Functional Jobs (FunctionalJobs.com), Feb 12, 2019

Interos Solutions, Inc. is a fast-growing venture backed company with an AI-driven SaaS application that delivers our commercial and government customers unique insight into their ever-changing business ecosystems. The core of our platform is the compilation, analysis and visualization of dynamically changing big data collected across open source, proprietary and public data sources. By continuously analyzing our "real-time" data stream we provide our customers with unique insights int…


Formal proof and analysis of an incremental cycle detection algorithm — GaGallium (Armaël Guéneau), Feb 12, 2019

As part of my PhD at Gallium, I have been working on formally proving OCaml programs using Coq. More precisely, the focus has been on proving not only that a program is functionally correct (always compute the right result), but also does so in the expected amount of time. In other words, we are interested in formally verifying the asymptotic complexity of OCaml programs.

In this blog-post, I’m happy to report on our latest endeavour: the verification of the correctness and (amortized) compl…


What’s new for Alt-Ergo in 2018 ? Here is a recap ! — OCamlPro, Feb 11, 2019

After the hard work done on the integration of floating-point arithmetic reasoning two years ago, 2018 is the year of polymorphic SMT2 support and efficient SAT solving for Alt-Ergo. In this post, we recap the main novelties last year, and we announce the first Alt-Ergo Users’ Club meeting.

An SMT2 front-end with prenex polymorphism

As you may know, Alt-Ergo’s native input language is not compliant with the SMT-LIB 2 input language standard, and translating formulas from SMT-LIB 2 to…


Learning a New Language — Gaius Hammond, Feb 10, 2019

Generally, every program I write, regardless of what useful thing it actually does, and regardless of what programming language it is written in, has to do certain things, which usually includes

  • Importing a library and calling functions contained within that library
  • Handling datatypes such as converting between strings and integers, and knowing when this is implicit or explicit, how dates and times work, and so on
  • Getting command line parameters or parsing a configuration file
  • Writing log messa…

Release of Base64 — Tarides (Romain C.), Feb 08, 2019

MirageOS is a library operating system written from the ground up in OCaml. It has an impossible and incredibly huge goal to re-implement all of the world! Looking back at the work accomplished by the MirageOS team, it appears that's what happened for several years. Re-implementing the entire stack, in particular the lower layers that we often take for granted, requires a great attention to detail. While it may seem reasonably easy to implement a given RFC, a huge amount of work is often hid…


OCaml server-side developer at Ahrefs (Full-time) — Functional Jobs (FunctionalJobs.com), Feb 05, 2019

What we need

Ahrefs is looking for a backend developer with a deep understanding of networks, distributed systems, OS fundamentals and taste for simple and efficient architectural designs. Our backend is implemented mostly in OCaml and some C++, as such proficiency in OCaml is very much appreciated, otherwise a strong inclination to intensively learn OCaml in a short term will be required. Understanding of functional programming in general and/or experience with other FP languages (F#,Haskell,S…


Improving Tezos Storage : Gitlab branch for testers — OCamlPro, Feb 04, 2019

This article is the third post of a series of posts on improving Tezos storage.  In our previous post, we announced the availability of a docker image for beta testers, wanting to test our storage and garbage collector. Today, we are glad to announce that we rebased our code on the latest version of mainnet-staging, and pushed a branch mainnet-staging-irontez on our public Gitlab repository:


The only difference with the previous po…


Playing Atari Games with OCaml and Deep Reinforcement Learning — Jane Street, Feb 02, 2019

In a previous blog post we detailed how we used OCaml to reproduce some classical deep-learning results that would usually be implemented in Python. Here we will do the same with some Reinforcement Learning (RL) experiments.

Elixir Developers & Functional Programmers at CareDox (Full-time) — Functional Jobs (FunctionalJobs.com), Feb 01, 2019

Love functional programming? Want to keep millions of children healthy? CareDox is hiring Elixir developers and functional programmers interested in learning Elixir.

We're a diverse, collaborative team of thoughtful, friendly engineers driven by CareDox's mission of working with schools and school nurses to immunize all children -- even the uninsured! -- against diseases like the flu and to help children with chronic illnesses (like asthma) manage their care.

We take pride in our Eli…


Improving Tezos Storage : update and beta-testing — OCamlPro, Jan 30, 2019

In a previous post, we presented some work that we did to improve the quantity of storage used by the Tezos node. Our post generated a lot of comments, in which upcoming features such as garbage collection and pruning were introduced. It also motivated us to keep working on this (hot) topic, and we present here our new results, and current state. Irontez3 is a new version of our storage system, that we tested both on real traces and real nodes. We implemented a garbage-collector for it, that is …


Tezos and OCamlPro — OCamlPro, Jan 29, 2019

A reflection on the new year… Today, Tezos is a global network and an open source project with developers spanning over five continents. In the inception of this project, the French company OCamlPro which, to this day, stills develops numerous projects around Tezos, played a particularly important role. Indeed, they were the first home of the research engineers who laid down the cornerstone of the code base, in tight collaboration with Arthur Breitman and the architect of the project, and …


L2 Regularization and Batch Norm — Jane Street, Jan 29, 2019

This blog post is about an interesting detail about machine learning that I came across as a researcher at Jane Street - that of the interaction between L2 regularization, also known as weight decay, and batch normalization.

opam 2.0.3 release — OCaml Platform (Raja Boujbel - OCamlPro, Louis Gesbert - OCamlPro), Jan 28, 2019

We are pleased to announce the release of opam 2.0.3.

This new version contains some backported fixes:

  • Fix manpage remaining $ (OPAMBESTEFFORT)
  • Fix OPAMROOTISOK handling
  • Regenerate missing environment file

Installation instructions (unchanged):
  1. From binaries: run

    sh <(curl -sL https://raw.githubusercontent.com/ocaml/opam/master/shell/install.sh)

    or download manually from the Github "Releases" page to your PATH. In this case, don't forget to run opam init --reinit -ni to enable san…


Deprecating file releases on the forge — OCamlCore Forge News (Sylvain Le Gall), Jan 18, 2019

As part of the deprecation plan for forge.ocamlcore.org, the ability to upload files to the forge will soon be deprecated. Projects will not have the ability to create new releases. I will keep the current uploaded files and will continue to serve them. Here is what will change, once the deprecation will be done: - files will be moved to a new static host: https://download.ocamlcore.org - all links in the "Files" section will point to an URL https://download.ocamlcore.org - statistic…Read more...

Coq 8.9.0 is out — Coq, Jan 18, 2019

The 8.9.0 release of Coq is available.

It features many quality-of-life improvements, including goal differences as well as numeral and custom notations. For details, see the CHANGES file.

Feedback and bug reports are extremely welcome.

Improving Tezos Storage — OCamlPro, Jan 15, 2019

Running a Tezos node currently costs a lot of disk space, about 59 GB for the context database, the place where the node stores the states corresponding to every block in the blockchain, since the first one. Of course, this is going to decrease once garbage collection is integrated, i.e. removing very old information, that is not used and cannot change anymore (PR720 by Thomas Gazagnaire, Tarides, some early tests show a decrease to 14GB ,but with no performance evaluation). As a side note, thi…


A tutorial for building web applications with Incr_dom — Jane Street, Jan 15, 2019

At Jane Street, our web UIs are built on top of an in-house framework called Incr_dom, modeled in part on React’s virtual DOM. Rendering different views efficiently in response to changes made to a shared model is a quintessentially incremental computation—so it should be no surprise that Incr_dom is built on top of Incremental.

How configurator reads C constants — Tarides (Etienne M.), Jan 03, 2019

Dune comes with a library to query OS-specific information, called configurator. It is able to evaluate C expressions and turn them into OCaml value. Surprisingly, it even works when compiling for a different architecture. How can it do that?

Using TLA+ to understand Xen vchan — Thomas Leonard, Jan 01, 2019

The vchan protocol is used to stream data between virtual machines on a Xen host without needing any locks. It is largely undocumented. The TLA Toolbox is a set of tools for writing and checking specifications. In this post, I’ll describe my experiences using these tools to understand how the vchan protocol works.

Table of Contents


Senior Software Engineer at camlCase (Full-time) — Functional Jobs (FunctionalJobs.com), Dec 27, 2018

camlCase is a blockchain research and development company, based in Brooklyn, NY. We build developer tools, write educational material, and offer consulting services for Tezos, with a particular focus on Michelson, Tezos' smart contract language.

You might be a good fit if your experience and interest includes any of the following:

  • Type-safe programming languages: OCaml, Haskell, Rust, PureScript
  • Programming language design implementation: parsers, interpreters, compilers, type systems, …

ocaml-http--migration-to-github — OCamlCore Forge News (Claudio Sacerdoti Coen), Dec 17, 2018

The ocaml-http project now resides on Github, https://github.com/sacerdot/ocaml-http. Further developments and new releases will take place on Github, not on this forge.

opam 2.0.2 release — OCamlPro, Dec 14, 2018

We are pleased to announce the release of opam 2.0.2.

As sandbox scripts have been updated, don’t forget to run opam init --reinit -ni to update yours.

This new version contains mainly backported fixes:

  • Doc:
    • update man page
    • add message for deprecated options
    • reinsert removed ones to print a deprecated message instead of fail (e.g. --alias-of)
    • deprecate no-aspcud
  • Pin:
    • on pinning, rebuild updated pin-depends packages reliably
    • include descr & url files on pinning 1.2 opam files
  • Sa…

opam 2.0.2 release — OCaml Platform (Raja Boujbel - OCamlPro, Louis Gesbert - OCamlPro), Dec 12, 2018

We are pleased to announce the release of opam 2.0.2.

As sandbox scripts have been updated, don't forget to run opam init --reinit -ni to update yours.

This new version contains mainly backported fixes:

  • Doc:
    • update man page
    • add message for deprecated options
    • reinsert removed ones to print a deprecated message instead of fail (e.g. --alias-of)
    • deprecate no-aspcud
  • Pin:
    • on pinning, rebuild updated pin-depends packages reliably
    • include descr & url files on pinning 1.2 opam files
  • Sandbox:
    • handle symlink…

MirageOS, towards a smaller and safer OS — Tarides (Romain C.), Dec 06, 2018

Presentation about MirageOS in Lambda World Cadìz on October 26th

Fixin' your automata — GaGallium (François Pottier), Dec 05, 2018

There are several ways of compiling a regular expression (RE) down to a deterministic finite-state automaton (DFA). One such way is based on Brzozowski derivatives of regular expressions. In this post, I describe a concise OCaml implementation of this transformation. This is an opportunity to illustrate the use of fix, a library that offers facilities for constructing (recursive) memoized functions and for performing least fixed point computations.

From REs to DFAs, via Brzozowski derivati…


Frama-C 18.0 (Argon) is out. Download ithere. — Frama-C, Nov 29, 2018

Safely typing algebraic effects — GaGallium (Nathanaël Courant), Nov 26, 2018

Last year (2017), I was following the MPRI, a research-oriented master programme in Paris. The project for the Functional programming and type systems course (taught by François Pottier, Didier Rémy, Yann Régis-Gianas and Pierre-Évariste Dagand) was to write a compiler for a tiny functional language. I extended that project with algebraic effects and a static type system checking that effects could not be unhandled. Explaining the type system of my implementation is what this post is about…


An Introduction to Tezos RPCs: Signing Operations — OCamlPro, Nov 21, 2018

In a previous blog post, we presented the RPCs used by tezos-client to
send a transfer operation to a tezos-node. We were left with two
remaining questions:

* How to forge a binary operation, for signature
* How to sign a binary operation

In this post, we will reply to these questions. We are still assuming
a node running and waiting for RPCs on address Since we will ask this node to forge a request, we really need to trust it, as a malicious node could send a different binary tr…


An Introduction to Tezos RPCs: a Basic Wallet — OCamlPro, Nov 15, 2018

In this technical blog post, we will briefly introduce Tezos RPCs through a simple example: we will show how the tezos-client program interacts with the tezos-node during a transfer command. Tezos RPCs are HTTP queries (GET or POST) to which tezos-node replies in JSON format. They are the only way for wallets to interact with the node. However, given the large number of RPCs accepted by the node, it is not always easy to understand which ones can be useful if you want to write a wallet. So, here…


View older blog posts.