Dear OCaml users, Two months after the release of the first alpha for OCaml 5.4.0, the release of OCaml 5.4.0 is drawing near. The internal API of the compiler libraries has been frozen, and most core developer tools support (or will support soon) the new version of the compiler. We have thus released a first beta version of OCaml 5.4.0 to help you update your softwares and libraries ahead of the release (see below for the installation instructions). Compared to the first alpha release, this beta release brings two notable changes. First, this beta partially reverts the changes of symbol names in executable (in order to keep current version of `perf` working with OCaml executable). Second, this beta fixes a significant performance issue on Apple Silicon macOS. Beyond these two changes, this first beta release contains a dozen of small bug fixes (from the runtime to the error messages) which is usual for the stage of the release. We are expecting the release candidate to follow this beta release soon in the beginning of August. The progresses on stabilising the ecosystem are tracked on the opam readiness for 5.4.0 meta-issue: https://github.com/ocaml/opam-repository/issues/27916. The full release is expected in the middle of August (see the new prospective calendar at https://github.com/ocaml/ocaml/blob/trunk/release-info/calendar.md) for more information). If you find any bugs, please report them on OCaml's issue tracker: https://github.com/ocaml/ocaml/issues . If you are interested in full list of features and bug fixes of the new OCaml version, the updated change log for OCaml 5.4.0 is available at https://github.com/ocaml/ocaml/blob/5.4/Changes. Happy hacking, Florian Angeletti for the OCaml team Installation Instructions ------------------------ The base compiler can be installed as an opam switch with the following commands on opam 2.1 and later: opam update opam switch create 5.4.0~beta1 The source code for the beta is also available at these addresses: * GitHub: https://github.com/ocaml/ocaml/archive/5.4.0-beta1.tar.gz) * OCaml archives at Inria: https://caml.inria.fr/pub/distrib/ocaml-5.4/ocaml-5.4.0~beta1.tar.gz Fine-Tuned Compiler Configuration --------------------------------- If you want to tweak the configuration of the compiler, you can switch to the option variant with: opam update opam switch create ocaml-variants.5.4.0~beta1+options where `option_list` is a space separated list of `ocaml-option-*` packages. For instance, for a flambda and no-flat-float-array switch: opam switch create 5.4.0~beta1+flambda+nffa ocaml-variants.5.4.0~beta1+options ocaml-option-flambda ocaml-option-no-flat-float-array All available options can be listed with `opam search ocaml-option`. Changes since the first alpha ----------------------------- Code generation fixes --------------------- * (*breaking change*) #13050, #14104, +[#14143](https://github.com/ocaml/ocaml/issues/14143): Use '$' instead of '.' to separate module names in symbol names on macOS and Windows (including the Cygwin backend). This changes mangling of OCaml identifiers on those operating systems from `camlModule.name_NNN` to `camlModule$name_NNN`. Additionally it changes the encoding of special characters from $xx (two hex digits) to $$xx (two dollar signs followed by two hex digits). (Tim McGilchrist, with contributions from Xavier Leroy, reviewed by Xavier Leroy, Miod Vallat, Gabriel Scherer, Nick Barnes and Hugo Heuzard) - [#14088](https://github.com/ocaml/ocaml/issues/14088), [#14091](https://github.com/ocaml/ocaml/issues/14091): fix non-deterministic code generation in matching.ml (backport of rescript-lang/rescript[#7557](https://github.com/ocaml/ocaml/issues/7557)) (Christiano Calgano, review by Gabriel Scherer and Vincent Laviron) Performance fix -------------- - [#13262](https://github.com/ocaml/ocaml/issues/13262), [#14074](https://github.com/ocaml/ocaml/issues/14074): fix performance issue on Apple Silicon macOS by emitting `stlr` instead of `dmb ishld; str`. (KC Sivaramakrishnan, report by François Pottier, analysis by Frédéric Bour, Xavier Leroy, Miod Vallat, Gabriel Scherer and Stephen Dolan, review by Miod Vallat, Vincent Laviron and Xavier Leroy) Standard library fix: --------------------- * (*breaking change*) [#14124](https://github.com/ocaml/ocaml/issues/14124): Do not raise Invalid_argument on negative List.{drop,take}. (Daniel Bünzli, review by Gabriel Scherer, Nicolás Ojeda Bär) Runtime fixes ------------- - [#14057](https://github.com/ocaml/ocaml/issues/14057): Don't update memprof too early at the end of a minor GC. (Nick Barnes, review by Damien Doligez). - [#13586](https://github.com/ocaml/ocaml/issues/13586), [#14093](https://github.com/ocaml/ocaml/issues/14093): Fix closing an out_channel during flush (Stephen Dolan, report by Jan Midtgaard, investigation by Nick Roberts, review by Antonin Décimo and Miod Vallat) Error message fixes ------------------- - [#13956](https://github.com/ocaml/ocaml/issues/13956) Fix a regression introduced in [#13308](https://github.com/ocaml/ocaml/issues/13308) triggering wrong unused warnings. (Ulysse Gérard, review by Florian Angeletti) - [#14070](https://github.com/ocaml/ocaml/issues/14070): also point to label mismatches in error messages for labelled tuples (Florian Angeletti, review by Gabriel Scherer) - [#14135](https://github.com/ocaml/ocaml/issues/14135): Fix a rare internal typechecker error when combining recursive modules, polymorphic fields or methods, and constrained type parameters. (Florian Angeletti, review by Gabriel Scherer) Compilerlibs fixes ------------------ - [#14105](https://github.com/ocaml/ocaml/issues/14105): Fix a loop in Pprintast that could result in a hang when printing constructor `(::)` in isolation. (Ulysse Gérard, review by Nicolás Ojeda Bär and Florian Angeletti) - [#14108](https://github.com/ocaml/ocaml/issues/14108): toplevel, fix a typo in directive type mismatch (Florian Angeletti, review by Gabriel Scherer) - [#14101](https://github.com/ocaml/ocaml/issues/14101), [#14139](https://github.com/ocaml/ocaml/issues/14139): define atomic helper types inside `caml/misc.h` to improve header compatibility with C++ (Florian Angeletti, report by Kate Deplaix, review by Gabriel Scherer) OCamldoc fix ------------ - [#13896](https://github.com/ocaml/ocaml/issues/13896), [#14098](https://github.com/ocaml/ocaml/issues/14098): ocamldoc, do not wrap module description in a paragraph tag inside the table of modules (Florian Angeletti, report by John Whitington, review by Gabriel Scherer)