OCaml Weekly News

Previous Week Up Next Week


Here is the latest OCaml Weekly News, for the week of June 27 to July 04, 2023.

Table of Contents

New release of CAISAR, a platform for characterizing AI safety and robustness

Julien Girard announced

We are happy to announce the release of CAISAR 0.2, to celebrate (with one week delay) the 234th birthday of the Serment du jeu de Paume. On this day, courageous people took a vow to abolish autocracy and fight for their rights.

This release is the result of more than one year of work. Here are some of the most prominent changes that we are happy to share. The release is available under our gitlab, on opam and on Dockerhub. You may check our website for additional infos.

New prover support

We added the support of several provers:

  • the alpha-beta-CROWNprover; winner of the 2021 and 2022 edition of the VNN-COMP
  • the nnenumhttps://github.com/stanleybak/nnenum) prover
  • the AIMOS metamorphic testing prover, for now internally developped at CEA

We also added support to the VNNLib standard. In the future, adding a VNNLib compliant prover to CAISAR would only require to edit two small files, which is a huge step towards integrating more provers. This also results in supporting all solvers that support the SMTLIB2 language (which VNNLib is a subset of). We implemented a custom transformation in CAISAR that automatically translates the neural network control flow into a SMT formula. This custom transformation had been tested for the CVC5 solver.


The first version of the CAISAR manual is available under the documentation section of our website. It includes detailed installation instructions, a synopsis of common commands and two tutorials on classical benchmarks. The current version of those tutorials make use of experimental features that we plan to document in a future release. We hope this manual will provide a good entry point to CAISAR, and formal verification of machine learning programs at large.


We added various utilities to make CAISAR slicker to use, such as several logging options, verification through a JSON file, and reworked help messages.

We are also looking for fixed-term positions, intern and PhD students to work on CAISAR, check our website or the ocaml job board for more infos.

stdlib-random release 1.1.0

octachron announced

The library stdlib-random is a small compatibility library that provides compiler-independent implementations of the PRNGs used in the history of the standard library Random:

  • stdlib-random.v3: implement the PRNG used in OCaml 3.07 to 3.11
  • stdlib-random.v4: implement the PRNG used in OCaml 3.12 to 4.14
  • stdlib-random.v5: implement the PRNG currently used in OCaml 5
  • stdlib-random.v5o: implement the PRNG currently used in OCaml 5 in pure OCaml

This library is targeted toward programs that need a deterministic and stable behavior of the Random module across OCaml versions.

The newly released version 1.1.0 updates all implementations to provide the new PRNG state serialization functions (Random.State.to_binary_string and Random.State.of_binary_string) that will be available in OCaml 5.1.0 .

dune 3.8.0

Etienne Millon announced

And here’s the changelog for dune 3.8.3, just released, which fixes two important bugs on Linux and Windows:

3.8.3 (2023-06-27)

  • Fix deadlock on Windows (#8044, @nojb)
  • When using sendfile to copy files on Linux, fall back to the portable version if it fails at runtime for some reason (NFS, etc). (#8049, fixes #8041, @emillon)

plotly release 1.0.0, a wrapper for Plotly open source graphing library

Jun Furuse announced

I released an OPAM package plotly, a wrapper for Plotly Open Source Graphing Library.

It provides interfaces for 2 backends:

  • “Python” version, using the Python library of Plotly via Pyml, for standalone programs
  • “JSOO” version, using the JS library of Plotly via JSOO, for browsers

It supports only a few charts (scatter, scatter3d, bar, pie) and options currently, but it should be easy to add more. Enjoy!

n4323 added

Help us Make the New Learn Area on OCaml.org Awesome

Sabine Schmaltz announced

I’m here to draw on your collective wisdom again!

Here’s a work-in-progress draft of the new Learn Area landing page:


Design on Figma

As you can see, there’s still work to be done. For example, we’re going to make the “Download” and the “Standard Library” boxes a bit smaller. And, clearly, this design is using placeholder content.

All the design has been done with one thing in mind: Flexibility to arrange content in such a way that we can show different groups of users what they need to see. We can rearrange and experiment with the blocks you see on the page.

From the feedback we got in https://discuss.ocaml.org/t/you-started-to-learn-ocaml-less-than-12-months-ago-please-help-us-with-our-user-survey-on-the-ocaml-org-learning-area/11945/2, we identified a common pattern that all good programming language documentation pages have:

There is a progression from beginner content to advanced content, focused clearly on the things that people need to learn to be productive with the language.

Now… here’s what I ask you to do: Imagine which documentation do we have to give people here on the main page of the Learn Area to make them happy and productive with OCaml:

  1. Which topics would have to be covered by the “tutorial blocks”?
  2. Which books do we feature?

The point of the main page of the Learn area is to quickly guide people into the direction they may be interested in.

Your feedback directly helps us prioritize the creation of missing documentation and helps us rearrange & improve the existing documentation. Please do be specific and give us titles for the pages you want to see, as well as a short description about what the user would find there.

Sedlex 3.2

Romain Beauxis announced

Sedlex 3.2 is out! 🎉

Sedlex is a unicode-friendly lexer generator for OCaml originally written by Alain Frisch at LexiFi and now maintained under the ocaml-community umbrella.

You read the notes for this release here: https://github.com/ocaml-community/sedlex/releases/tag/v3.2 and an updated opam package should be available soon.

This release brings improvements on a couple of fronts:

  • Better performance when parsing in-memory strings (up to 20x on large ones!)
  • Cleaned up logic with better MalFormed error reporting
  • A new position API returning positions in bytes rather than code points.

The last point might be of interest to most users of the library. It is in fact quite likely that a lot of users were already expecting the existing position API to return positions in bytes. If so, feel free to upgrade to this version!

dune 3.9.0

Etienne Millon announced

The Dune team is pleased to announce the release of Dune 3.9.0. It comes with many new features, including:

  • a new dune show command to display various pieces of information.
  • some fixes in the dialect support that will make it easier to work with Dream’s eml files
  • a new (build_if) toggle in the (test) stanza which will help packaging nonportable tests and benchmarks.


  • Include the time it takes to read/write state files when --trace-file is enabled (#7960, @rgrinberg)
  • Include source tree scans in the traces produced by --trace-file (#7937, @rgrinberg)
  • Add --all option to dune rpc status to show all Dune RPC servers running. (#8011, fix #7902, @Alizter)
  • Add additional metadata to the traces provided by --trace-file whenever --trace-extended is passed (#7778, @rleshchinskiy)
  • $ dune describe is now a command group, so arguments to subcommands must be passed after subcommand itself. (#7919, @Alizter)
  • Add dune show command group which is an alias of dune describe. (#7946, @Alizter)
  • Add dune show env command and make dune printenv an alias of it. (#7985, @Alizter)
  • Add commands dune show targets and dune show aliases that display all the available targets and aliases in a given directory respectively. (#7770, grants #265, @Alizter)
  • Extensions used in (dialect) can contain periods (e.g., cppo.ml). (#7782, fixes #7777, @nojb)
  • The interface and implementation fields of a (dialect) are now optional (#7757, @gpetiot)
  • Add (build_if) to the (test) stanza. When it evaluates to false, the executable is not built. (#7899, fixes #6938, @emillon)
  • Allow (include_subdirs qualified) to be used when libraries define a (modules ...) field (#7797, fixes #7597, @anmonteiro)
  • Allow multiple globs in library’s (stdlib (internal_modules ..)) (@anmonteiro, #7878)


  • Do not re-run OCaml syntax files on every iteration of the watch mode. This is too memory consuming. (#7894, fix #6900, @rgrinberg)
  • Attach melange rules to the default alias (#7926, @haochenx)
  • Compute digests and manage sandboxes in background threads (#7947, @rgrinberg)


  • Validate file extension for $ dune ocaml top-module. (#8005, fixes #8004, @3Rafal)
  • Cinaps: The promotion rules for cinaps would only offer one file at a time no matter how many promotions were available. Now we offer all the promotions at once (#7901, @rgrinberg)
  • Add necessary parentheses in generated opam constraints (#7682, fixes #3431, @Lucccyo)


  • Remove some compatibility code for old version of dune that generated .merlin files. Now dune will never remove .merlin files automatically (#7562)
  • In opam constraints, reject (and) and (or) with no arguments at parse time (#7730, @emillon)

Other OCaml News

From the ocaml.org blog

Here are links from many OCaml blogs aggregated at the ocaml.org blog.


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.