OCaml Weekly News

Previous Week Up Next Week


Here is the latest OCaml Weekly News, for the week of June 14 to 21, 2022.

Table of Contents

OBazl Toolsuite - tools for building OCaml with Bazel

Gregg Reynolds announced

Version 2 of OBazl, a Bazel ruleset for building OCaml code, will soon be available. I'm letting you know early because I'll be giving a presentation about the OBazl Toolsuite for the Bazel Exchange conference next Wed, 22 June, at 3:00 pm UDT (10:00 am CDT). It's a virtual conference so you can tune in from anywhere. The talk will focus on some of the quirks of the OCaml build discipline and how I addressed them for the OBazl ruleset.

The tools are usable now, they're just not yet properly documented and packaged, and in a few places there's a little more work to be done on the code. Nonetheless there is quite a bit of documentation (CAVEAT: some of it is outdated), with more on the way soon, and there are lots of demos available. So if you're interested in using Bazel to build your OCaml code I welcome you to take a look:

The OBazl Book

Twitter handle is @obazldev Discord: https://discord.gg/PHSAW5DUva

Gregg Reynolds lated added

PS. The conference organizers have provided this discount token: BAZEL-GR-20

It should be good for 20% off, registration is at https://events.skillsmatter.com/bazelx2022

Job offer: 3 years compiler engineer at the French tax authority

Denis Merigoux announced

[En français parce que c'est une offre d'emploi dans l'administration]

Bonjour à toutes et à tous,

Vous aimez la programmation fonctionnelle et les compilateurs ? Vous en avez marre des offres d'emploi dans la blockchain ? Ça tombe bien, j'ai ce qu'il vous faut !

Il y a deux ans, j'ai lancé un grand projet de modernisation du calcul informatique de calcul de l'impôt sur le revenu à la Direction Générale des Finances Publiques (DGFiP), en partenariat avec Inria: https://www.inria.fr/fr/mlang-modernisation-calcul-impot-revenu.

Le logiciel au cœur de ce projet de modernisation est Mlang, un compilateur écrit en OCaml pour un couple de langages dédiés utilisés par la DGFiP pour encoder le calcul de l'impôt sur le revenu. Depuis deux ans, la DGFiP travaille à intégrer Mlang à l'infrastructure officielle de calcul de l'impôt sur le revenu pour remplacer des systèmes vieillissants. C'est donc un projet à très fort impact (80M€ par d'impôts par an), et proche de la R&D (OCaml, libre, innovation) ! Depuis un an, la DGFiP emploie la société OCamlPro sur le projet mais souhaite maintenant ré-internaliser ses compétences pour garder la souveraineté numérique sur son infrastructure de calcul.

C'est là que cette offre d'emploi entre en jeu ! En effet la DGFiP vient d'ouvrir un poste en CDD de 3 ans pour un.e expert.e en compilation ! Les détails :

  • Bureaux à Noisy-le-Grand (+ jusqu'à 3 jours télétravail/semaine)
  • Salaire: À négocier selon expérience mais similaire à "Inspecteur des finances publiques". Selon le site du ministère de l'économie ça débuterait à 3k€ net/mois.
  • Tâches: Maintenance, évolution de Mlang et travaux annexes

Et pour l'heureux.se recruté.e, la cerise sur le gâteau sera de pouvoir collaborer avec moi et l'équipe Prosecco d'Inria (ainsi que Raphaël Monat, ) :) Attention cependant : il faudra s'attendre à devoir également aider l'équipe de la DGFiP sur d'autres chantiers en fonction des priorités. De même, l'objectif est de partager la compétence en compilation au sein de la DGFiP, donc les profils évangélisateurs de la programmation fonctionnelle sont les bienvenus !

Pour référence, voici l'offre officielle complète: https://merigoux.ovh/assets/OffreDGFiP.pdf. S'il vous plaît, pas d'autocensure à cause de ce qui est marqué dans ce PDF! Si vous avez un doute contactez-moi par retour de mail.

Deadline pour les candidatures: 9 juillet. Prise de poste inconnue, sûrement aux alentours du 1er septembre mais j'imagine que c'est négociable.

Denis Merigoux later added

Si vous êtes intéressé.e, envoyez votre CV et lettre de motivation à bureau.si-part-rh@dgfip.finances.gouv.fr et bureau.rh-mobilite-carriere-a-recrutementchoix@dgfip.finances.gouv.fr.

OCaml 5.0, zeroth alpha release

octachron announced

Five months after the initial merge of the multicore branch into the mainline OCaml and three months after the release of OCaml 4.14.0, OCaml 5.0.0 is starting to take shape.

I am thus happy to announce an exceptional zeroth alpha release of OCaml 5.0.0 (see below for the installation instructions).

This alpha release is expected to be rougher than an usual alpha release, due to the full rewrite of the OCaml runtime. In particular, the bytecode debugger will only be available in the next alpha release. Similarly, there will be some changes to the internal C runtime API and to the files installed by the compiler package in the next alpha release.

Moreover, this zeroth alpha release is the occasion to remind everyone that OCaml 5.0 itself is expected to be a more experimental release than usual. Notably, the native compiler will only be available on the ARM64 and x86-64 architectures in this 5.0 release.

Nevertheless, this zeroth alpha version is already stable enough for fellow hackers eager to join us in our early bug hunting and opam ecosystem fixing fun, or to venture in the new era of parallelism and (experimental) effects.

You can follow the progresses in stabilising the opam ecosystem on


A brief summary is that at least dune, merlin, ppxlib, utop, ocamlfind, and ocamlbuild work (potentially by using patches from the alpha opam repository).

If you find any bugs, please report them here:


In particular, any sequential OCaml 4 library or program should be valid in OCaml 5 (except for deprecated modules and functions). Please don't hesitate to report any compatibility bugs!

If you are interested by the ongoing list of bug fixes, the updated change log for OCaml 5.0.0 is available at:


Installation instructions

The base compiler can be installed as an opam switch with the following commands on opam 2.1:

opam update
opam switch create 5.0.0~alpha0

For previous version of opam, the switch creation command line is slightly more verbose:

opam update
opam switch create 5.0.0~alpha0 --repositories=default,beta=git+https://github.com/ocaml/ocaml-beta-repository.git

If you want to tweak the configuration of the compiler, you can switch to the option variant with:

opam update
opam switch create <switch_name> ocaml-variants.5.0.0~alpha0+options <option_list>

where <option_list> is a comma separated list of ocaml-option-* packages. For instance, for a flambda and no-flat-float-array switch:

opam switch create 5.0.0~alpha0+flambda+nffa ocaml-variants.5.0.0~alpha0+options ocaml-option-flambda

The command line above is slightly more complicated for an opam version anterior to opam 2.1:

opam update
opam switch create <switch_name> --packages=ocaml-variants.5.0.0~alpha0+options,<option_list>

In both cases, all available options can be listed with opam search ocaml-option.

If you want to test this version, it is strongly advised to install the alpha opam repository



opam repo add alpha git://github.com/kit-ty-kate/opam-alpha-repository.git

This alpha repository contains various fixes in the process of being upstreamed.

The source code for the alpha is also available at these addresses:

Daniel Bünzli asked and octachron replied

Does this mean we get global warming again ?

Indeed! I should have mentioned that point! The normal development process can restart on the compiler development branch.

I will also try to slowly go through the backlog of frozen PRs once the alpha releases settle down.

Tezt, a framework for all your tests

rbardou announced

Tezt (pronounced tɛzti) is a test framework for OCaml that has been developed and used at Nomadic Labs to test Octez, an OCaml implementation of the Tezos blockchain. It has become quite mature and we feel it would benefit the OCaml community at large, so we are releasing it publicly as a standalone product.

Tezt is well-suited for unit tests, integration tests, and regression tests in particular. It was designed with a focus on user experience, with colourful logs, various ways to select the tests to run from the command-line, and more. It integrates well into CI pipelines. And it cleans up after itself, deleting temporary files and killing external processes. Unless you tell it not to, of course.

For a more in-depth tour of Tezt, see our latest blog post entry.

Tezt is available on opam:

opam install tezt

Have a look at the API documentation and the source code.

OCaml Stdlib, Containers, Batteries, Base and F# core functions comparisons

Jp R announced


Comparisons (names/signatures) of the core functions used in:

  • OCaml Stdlib (v4.41.0)
  • Containers (v3.8)
  • Batteries (v3.5.1)
  • Base (v0.15.0)
  • F# (v6.0) as a bonus

Note: F# provides an Array.Parallel module with some functions (choose, collect, init, iter, iteri, map, mapi, partition) which could be good candidates for OCaml 5.0.0…

Dune 3.3.0

Etienne Millon announced

On behalf of the dune team, I’m pleased to announce the release of version 3.3.0. This is the first version that supports the upcoming OCaml 5.0. It also improves safety by sandboxing more rules and enabling more warnings, and there's a bunch of new features on the coq side too. Full changelog follows.

Note that as usual, dune works hard not to break existing packages. So even if it mentions that rules require precise dependencies, for example, this new safety net is only enabled for project that use (lang dune 3.3).

Happy hacking.

3.3.0 (17-06-2022)

  • Sandbox preprocessing, lint, and dialect rules by default. All these rules now require precise dependency specifications (#5807, @rgrinberg)
  • Allow list expansion in the pps specification for preprocessing (#5820, @Firobe)
  • Add warnings 67-69 to dune's default set of warnings. These are warnings of the form "unused X.." (#5844, @rgrinberg)
  • Introduce project "composition" for coq theories. Coq theories in separate projects can now refer to each other when in the same workspace (#5784, @Alizter, @rgrinberg)
  • Fix hint message for data_only_dirs that wrongly mentions the unknown constructor data_only (#5803, @lambdaxdotx)
  • Fix creating sandbox directory trees by getting rid of buggy memoization (#5794, @rgrinberg, @snowleopard)
  • Handle directory dependencies in sandboxed rules. Previously, the parents of these directory dependencies weren't created. (#5754, @rgrinberg)
  • Set the exit code to 130 when dune is terminated with a signal (#5769, fixes #5757)
  • Support new locations of unix, str, dynlink in OCaml >= 5.0 (#5582, @dra27)
  • The coq.theory stanza now produces rules for running coqdoc. Given a theory named mytheory, the directory targets mytheory.html/ and mytheory.tex/ or additionally the aliases @doc and @doc-latex will build the HTML and LaTeX documentation repsectively. (#5695, fixes #3760, @Alizter)
  • Coq theories marked as (boot) cannot depend on other theories (#5867, @ejgallego)
  • Ignore bigarray in (libraries) with OCaml >= 5.0. (#5526, fixes #5494, @moyodiallo)
  • Start with :standard when building the ctypes generated foreign stubs so that we include important compiler flags, such as -fPIC (#5816, fixes #5809).


If you happen to miss a CWN, you can send me a message and I'll mail it to you, or go take a look at the archive or the RSS feed of the archives.

If you also wish to receive it every week by mail, you may subscribe online.