OCaml Weekly News
Hello
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.
Manual
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.
Usability
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:
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:
- Which topics would have to be covered by the “tutorial blocks”?
- 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.
Added
- 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 todune 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 ofdune describe
. (#7946, @Alizter) - Add
dune show env
command and makedune printenv
an alias of it. (#7985, @Alizter) - Add commands
dune show targets
anddune 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
andimplementation
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)
Changed
- 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)
Fixed
- 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)
Removed
- 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.
Old CWN
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.