OCaml release 5.1.1

Florian Angeletti <[email protected]>
Newsgroups gmane.comp.lang.caml.announce,gmane.comp.lang.caml.inria
Message-ID <[email protected]>
Dear OCaml users, 

In the last three months after the release of OCaml 5.1.0, three significant 
regressions have been discovered in OCaml 5.1.0. Those regressions concern the 
packaging of executables, the typechecking of OCaml programs, and the 
performance of numerical codes. 

Since those regressions affect many users and could have lasting effects, we 
have published a patch release, OCaml 5.1.1, fixing those issues. 

As a major exception to our policy for patch releases, OCaml 5.1.1 will contain 
one breaking change in the standard library: the `Compression` flag has been 
removed from the `Marshal` module. 
This drastic measure has been taken because supporting zstd compression in the 
standard library made zstd a dependency of all OCaml executables. Since the 
compiler should not propagate its dependencies on end-users, the support for 
compressed marshalling has been moved to a compiler internal library in 5.1.1. 

Accounting for the still experimental nature of the multicore runtime, this 
patch release 5.1.1 also contains safe fixes for subtle concurrency bugs in the 
OCaml runtime. 

The full list of changes is available below for more details. 

Happy hacking, 
Florian Angeletti for the OCaml team. 


Installation Instructions 
------------------------------- 

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

opam update 
opam switch create 5.1.1 

The source code for the release is also directly available on: 

* GitHub: https://github.com/ocaml/ocaml/archive/5.1.1.tar.gz 
* Inria archive: https://caml.inria.fr/pub/distrib/ocaml-5.1/ocaml-5.1.1.tar.gz 

Changes in OCaml 5.1.1 (8 December 2023) 
------------------------------------------------------------ 

### Standard Library: 

* (*breaking change*) [#12562](https://github.com/ocaml/ocaml/issues/12562), [#12734](https://github.com/ocaml/ocaml/issues/12734), [#12783](https://github.com/ocaml/ocaml/issues/12783): Remove the `Marshal.Compression` flag to the 
`Marshal.to_*` functions introduced in 5.1 by [#12006](https://github.com/ocaml/ocaml/issues/12006), as it cannot 
be implemented without risking to link -lzstd with all 
ocamlopt-generated executables. The compilers are still able to use 
ZSTD compression for compilation artefacts. 
(Xavier Leroy and David Allsopp, report by Kate Deplaix, review by 
Nicolás Ojeda Bär, Kate Deplaix, and Damien Doligez). 

### Bug Fixes: 

- #12623 fix the computation of variance composition 
(Florian Angeletti, report by Vesa Karvonen, review by Gabriel Scherer) 

- #12581, #12609: Fix error on uses of packed modules outside their pack 
to correctly handle nested packs 
(Vincent Laviron, report by Javier Chávarri, review by Pierre Chambart) 


- #12645, #12649 fix error messages for cyclic type definitions in presence of 
the `-short-paths` flag. 
(Florian Angeletti, report by Vesa Karvonen, review by Gabriel Scherer) 

- #12757](https://github.com/ocaml/ocaml/issues/12757): Fix ocamlnat (native toplevel) by registering frametables correctly 
(Stephen Dolan, Nick Barnes and Mark Shinwell, 
review by Vincent Laviron and Sébastien Hinderer) 

- #12791: `extern` is applied to definitions of `caml_builtin_cprim` 
and `caml_names_of_builtin_cprim` when linking bytecode '-custom' 
executables with a C++ linker. 
(Shayne Fletcher, review by Antonin Décimo and Xavier Leroy) 

### GC Performance Regression Fixes 

- #12318: GC: simplify the meaning of custom_minor_max_size: blocks with 
out-of-heap memory above this limit are now allocated directly in 
the major heap. 
(Damien Doligez, report by Stephen Dolan, review by Gabriel Scherer) 

- #12439]: Finalize and collect dead custom blocks during minor collection 
(Damien Doligez, review by Xavier Leroy, Gabriel Scherer and KC 
Sivaramakrishnan) 

- #12590, #12595: Move `caml_collect_gc_stats_sample` in 
`caml_empty_minor_heap_promote` before barrier arrival. 
(B. Szilvasy, review by Gabriel Scherer) 

- #12491, #12493 #12500, #12754: Do not change GC pace when creating sub-arrays of bigarrays 
(Xavier Leroy, report by Ido Yariv, analysis by Gabriel Scherer, 
review by Gabriel Scherer and Fabrice Buoro) 

### Runtime Bug Fixes 

- #11800, #12707: fix an assertion race condition in `install_backup_thread` 
(Jan Midtgaard, review by Gabriel Scherer) 

- #12486, #12535: Fix delivery of unhandled effect exceptions on amd64 with 
--enable-frame-pointers 
(Miod Vallat, report by Jan Midtgaard, review by Gabriel Scherer) 

- #12712, #12742: fix an assertion boundary case in `caml_reset_young_limit` 
(Jan Midtgaard, review by Guillaume Munch-Maccagnoni) 

- #12713, #12715: disable common subexpression elimination for atomic loads 
(Gabriel Scherer and Vincent Laviron, 
review by Vincent Laviron, KC Sivaramakrishnan and Xavier Leroy, 
report by Vesa Karvonen and Carine Morel)
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.