OCaml 5.0.0 - First Beta
The release of OCaml 5.0.0 is drawing near. The standard library has been stabilized and many opam packages already work with this release. After two alpha releases, we have released the first beta version to help you update your software and libraries ahead of the release (see below for the installation instructions).
If you find any bugs, please report them on GitHub issues.
Compared to the last alpha release, this beta contains many small, internal
runtime fixes (in particular in the
At the user level, the interface of the Domain and Effect module has been tweaked to be (hopefully) more forward-compatible:
- Exceptions related to effects are now defined in the Effecŧ module.
- The value
Domain.recommended_domain_countis no longer a constant and the function
Domain.at_each_spawnhas been removed.
With those changes, the standard library should be stable now.
If you are interested in the ongoing list of bug fixes, the updated change log for OCaml 5.0.0 is available on GitHub.
A short summary of the changes since the last alpha release is also available below.
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~beta1
For previous versions of opam, the switch creation command line is slightly more verbose:
opam update opam switch create 5.0.0~beta1 --repositories=default,beta=git+https://github.com/ocaml/ocaml-beta-repository.git
It might also be interesting to check the new support for parallelism by installing
domainslib library with
opam install domainslib
The source code for the beta release is also available at these addresses:
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 <switch_name> ocaml-variants.5.0.0~beta1+options <option_list>
option_list is a comma-separated list of
ocaml-option-* packages. For instance, for a
opam switch create 5.0.0~beta1+flambda+nffa ocaml-variants.5.0.0~beta1+options ocaml-option-flambda ocaml-option-no-flat-float-array
The command line above is slightly more complicated for opam versions before 2.1:
opam update opam switch create <switch_name> --packages=ocaml-variants.5.0.0~beta1+options,<option_list> --repositories=default,beta=git+https://github.com/ocaml/ocaml-beta-repository.git
In both cases, all available options can be listed with
opam search ocaml-option.
Optional opam Alpha Repository
During the beta release, if your dependencies are not yet compatible with OCaml 5.0.0, you might want to check the alpha opam repository: https://github.com/kit-ty-kate/opam-alpha-repository.
Which can be installed with
opam repo add alpha git+https://github.com/kit-ty-kate/opam-alpha-repository.git
You can check that the alpha repository has been correctly installed with
$ opam repo <><> Repository configuration forswitch<><><><><><><><><><><><><>
This alpha repository contains various fixes that are in the process of being upstreamed, but it should be less and less required with the progress of the beta release.
Changes Since Last Alpha Release
- #11309, #11424, #11427, +#11545: Add Domain.recommended_domain_count. (Christiano Haesbaert, Konstantin Belousov, review by David Allsopp, KC Sivaramakrishnan, Gabriel Scherer, Nicolas Ojeda Bar)
#11423: Move the effect exceptions to the Effect module (KC Sivaramakrishnan, Xavier Leroy, Florian Angeletti, review by Florian Angeletti, Xavier Leroy, and KC Sivaramakrishnan)
#11593: Remove Domain.at_each_spawn (Florian Angeletti, review by Guillaume Munch-Maccagnoni and KC Sivaramakrishnan)
#11303: Ensure that GC is not invoked from bounds check failures (Stephen Dolan, review by Sadiq Jaffer and Xavier Leroy)
#5299, #4787, #11138, #11272, #11506: To help debugging,
Caml_statenow dynamically checks that the domain lock is held and fails otherwise (with a fatal error at most entry points of the C API, or systematically in debug mode). A new variable
Caml_state_optis introduced and is
NULLwhen the domain lock is not held. This allows to test from C code if the current thread holds its domain lock. (Guillaume Munch-Maccagnoni, review by Florian Angeletti, Damien Doligez, Sadiq Jaffer, Xavier Leroy, and Gabriel Scherer)
#11223: The serialisation format of custom blocks changed in 4.08, but the deserialiser would still support the pre-4.08 format. OCaml 5.x removed support for this old format and provided a clear error message in this case. (Hugo Heuzard, review by Gabriel Scherer)
#11504, #11522: Use static allocation for
caml_make_float_vectin no-flat-float-array mode, it's more efficient and avoids a race condition (Xavier Leroy, report by Guillaume Munch-Maccagnoni, review by David Allsopp)
#11479: Make Unix.symlink domain-safe on Windows (Olivier Nicole, review by Xavier Leroy and David Allsopp)
#11294: Switch minimum required autoconf to 2.71. (David Allsopp, review by Xavier Leroy)
#11487: Thwart FMA test optimization during configure (William Hu, review by David Allsopp and Sébastien Hinderer)
#11576: Fix bug in Bigarray.Genarray.init in the the case of zero-dimensional arrays. (Nicolás Ojeda Bär, Jeremy Yallop, report by Masayuki Takeda, review by Jeremy Yallop and Florian Angeletti)
#11587: Prevent integer comparison from being used on pointers (Vincent Laviron, review by Gabriel Scherer)
- #11093: Add tutorials on parallelism features and the relaxed memory model (KC Sivaramakrishnan, review by Damien Doligez, Anil Madhavapeddy, Gabriel Scherer, Thomas Leonard, Tom Ridge, Xavier Leroy, Luc Maranget, Fabrice Buoro, Olivier Nicole, Guillaume Munch-Maccagnoni, Jacques-Henri Jourdan)