OCaml release 5.0.0

Florian Angeletti <[email protected]> Fri, 16 Dec 2022 13:21:48 +0100 (CET)
Newsgroups gmane.comp.lang.caml.announce
Message-ID <[email protected]>
--=_7222fbed-f645-435c-a7e6-2d84487f8df4
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

Dear OCaml users,=20

We have the pleasure of celebrating the birthdays of Jane Austen and Arthur=
 C. Clarke by=20
announcing the release of OCaml version 5.0.0.=20

The highlight of this new major version of OCaml is the long-awaited runtim=
e support=20
for shared memory parallelism and effect handlers.=20

This multicore support is the culmination of more than 8 years of effort,=
=20
and required a full rewrite of the OCaml runtime environment.=20
Consequently, OCaml 5.0.0 is expected to be a more experimental version of=
=20
OCaml than the usual OCaml releases.=20

For instance, in this release the native compiler only supports the x86-64 =
and arm64 architectures. In terms of operating systems, Linux, BSDs, macOS =
and mingw64 on Windows=20
are supported.=20

We are planning to restore the support for most previously supported archit=
ectures and operating systems, and address remaining known issues over the =
course of the next year.=20

Don't let those words of caution hinder your experimentation with OCaml 5:=
=20
OCaml 5 as a language is fully compatible with OCaml 4 down to the performa=
nce=20
characteristics of your programs. In other words, any code that works with =
OCaml 4 should work the same with OCaml 5.=20
Installation instructions are available below.=20

The currently known exceptions to this rule are:=20
- the removal of many long-deprecated functions and modules=20
- changes to the internal runtime API=20
- the performance of ephemerons is currently (and temporarily) strongly deg=
raded.=20

Please report any unexpected behaviours on the OCaml issue tracker=20
(at https://github.com/ocaml/ocaml/issues) and post any questions or commen=
ts=20
you might have on our discussion forums (https://discuss.ocaml.org).=20

During the maturing period for OCaml 5, the OCaml 4.14 branch will be maint=
ained=20
by backporting bug fixes from the OCaml 5 branch at regular intervals.=20
The next release on the OCaml 4.14 branch, OCaml 4.14.1, should soon follow=
 this release.=20

The full list of changes can be found in the changelog below.=20

Happy hacking,=20

-- Florian Angeletti for the OCaml team.=20



Installation Instructions=20
-------------------------=20

The base compiler can be installed as an opam switch with the following com=
mands:=20

opam update=20
opam switch create 5.0.0=20


It might be also interesting to check the new support for parallelism by in=
stalling the `domainslib` library with=20

opam install domainslib=20

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

* https://github.com/ocaml/ocaml/archive/5.0.0.tar.gz=20
* https://caml.inria.fr/pub/distrib/ocaml-5.0/ocaml-5.0.0.tar.gz=20

### Fine-Tuned Compiler Configuration=20

If you want to tweak the configuration of the compiler, you can switch to t=
he option variant with:=20

opam update=20
opam switch create <switch_name> ocaml-variants.5.0.0+options <option_list>=
=20

where `<option_list>` is a comma-separated list of `ocaml-option-*` package=
s. For instance, for a `flambda` and `no-flat-float-array` switch:=20

opam switch create 5.0.0+flambda+nffa ocaml-variants.5.0.0+options ocaml-op=
tion-flambda ocaml-option-no-flat-float-array=20


The command line above is slightly more complicated for opam versions befor=
e 2.1:=20


opam update=20
opam switch create <switch_name> --packages=3Docaml-variants.5.0.0+options,=
<option_list>=20

In both cases, all available options can be listed with `opam search ocaml-=
option`.=20

New manual sections:=20
--------------------=20

- Parallel programming (https://v2.ocaml.org/releases/5.0/manual/parallelis=
m.html)=20
- Memory model: The hard bits (https://v2.ocaml.org/releases/5.0/manual/mem=
orymodel.html)=20
- Effect handlers (https://v2.ocaml.org/releases/5.0/manual/effects.html)=
=20


Changelog for OCaml 5.0.0 (16 December 2022)=20
--------------------------------------------=20


- #10831: Multicore OCaml=20
(Enguerrand Decorne, Stephen Dolan, Tom Kelly, Sadiq Jaffer,=20
Anil Madhavapeddy, Sudha Parimala, KC Sivaramakrishnan,=20
Leo White, the Tarides multicore team,=20
review by Florian Angeletti, Damien Doligez, Xavier Leroy,=20
Guillaume Munch-Maccagnoni, Olivier Nicole, Nicol=C3=A1s Ojeda B=C3=A4r,=20
Gabriel Scherer, the OCaml core development team, and many=20
other valued reviewers.)=20

### Language features:=20

### Runtime system:=20

- #11400: Runtime events counters fixes=20
Fixes mismatch between OCaml and C APIs, removes events from 4.x that=20
are not present in the 5.0 GC and adds some missing probes.=20
(Sadiq Jaffer, review by Gabriel Scherer, Florian Angeletti)=20

- #11368: Runtime events buffer size OCAMLRUNPARAMS fix=20
The runtime events buffer size can now be set via the 'e' OCAMLRUNPARAM.=20
This is previously mistakenly enabled/disabled tracing instead.=20
(Sadiq Jaffer, review by KC Sivaramakrishnan, David Allsopp, Damien Doligez=
)=20

- #11308: Add environment variable to preserve runtime_events after exit=20
If the environment variable OCAML_RUNTIME_EVENTS_PRESERVE exists then the=
=20
runtime will not remove the runtime events ring buffers at exit. This=20
makes tracing very short running programs more reliable.=20
(Sadiq Jaffer, review by KC Sivaramakrishnan)=20

- #10964: Ring-buffer based runtime tracing (runtime_events)=20
Runtime_events is a very low overhead runtime tracing system designed for=
=20
continuous monitoring of OCaml applications.=20
(Sadiq Jaffer, review by Anil Madhavapeddy, Enguerrand Decorne,=20
Richard Warburton, Gabriel Scherer, Sabine Schmaltz, Florian Angeletti,=20
Patrick Ferris, Tom Kelly)=20

* #10723: do not use `-flat-namespace` linking for macOS.=20
(Carlo Cabrera, review by Damien Doligez)=20

* #10863, #10933: Remove support for old, unprefixed C runtime function nam=
es=20
such as `alloc`. The new names prefixed with `caml_` must be used instead,=
=20
such as `caml_alloc`. Consequently, it is no longer needed to define=20
`CAML_NAME_SPACE` to avoid bringing unprefixed names into scope: this is no=
w=20
the default behavior.=20
(Nicol=C3=A1s Ojeda B=C3=A4r, review by Xavier Leroy)=20

- #10902: Do not register empty code fragments in natdynlink.=20
(David Allsopp, review by Xavier Leroy and Damien Doligez)=20

- #10965: `caml_fatal_error_hook`, GC timing hooks, and=20
`caml_scan_roots_hook` are now atomic variables. Restore GC timing=20
hooks in multicore.=20
(Guillaume Munch-Maccagnoni, review by Enguerrand Decorne, Xavier=20
Leroy, Gabriel Scherer, and KC Sivaramakrishnan)=20

- #11209: Add a public and thread-safe timing hook running at domain=20
termination, after this domain has stopped running any OCaml code:=20
`caml_domain_terminated_hook`. This can be useful for implementing=20
domain-local state in C.=20
(Guillaume Munch-Maccagnoni, review by Xavier Leroy and Gabriel=20
Scherer)=20

- #10875, #11731: Add option to allocate fiber stacks and sigaltstacks with=
=20
mmap(MAP_STACK) instead of malloc. This is exposed via a configure=20
--enable-mmap-map-stack option, and is enabled by default on OpenBSD where=
=20
it is mandatory.=20
(Anil Madhavapeddy, review by Gabriel Scherer, Tom Kelly,=20
Michael Hendricks and KC Sivaramakrishnan).=20

- #10950: Do not use mmap to allocate Caml_state.=20
In order to reduce virtual memory usage, we dynamically allocate=20
the domain_state structure.=20
(Enguerrand Decorne, KC Sivaramakrishnan and Tom Kelly,=20
review by Anil Madhavapeddy and Gabriel Scherer)=20

- #11010: Use strerror_r for reentrant error string conversion.=20
(Anil Madhavapeddy and Xavier Leroy, review by same and Edwin T=C3=B6r=C3=
=B6k)=20

- #11002, #11066, #11086: Do not use Begin_roots/End_roots macros in=20
the runtime system. Also fix a missing root registration in the=20
implementation of Unix.write on Windows.=20
(Nicol=C3=A1s Ojeda B=C3=A4r, Daniel B=C3=BCnzli and Antonin D=C3=A9cimo,=
=20
review by Xavier Leroy and David Allsopp)=20

- #11022: Track GC work for all managed bigarray allocations=20
(Stephen Dolan, report by Andrew Hunter, review by Damien Doligez)=20

- #10802: Use 4.12 value macros and helpers in C code=20
(Antonin D=C3=A9cimo, review by Gabriel Scherer)=20

- #11105: Fix handling of fiber stack cache with multiple domains=20
(Jon Ludlam, KC Sivaramakrishnan and Tom Kelly)=20

- #11054: Respect user provided maximum stack space=20
Make sure the stack we initially request is sized accordingly to=20
the user provided settings. tmc/stack_space is also updated by=20
this PR in order to account for this change.=20
(Enguerrand Decorne, report by Jon Ludlam,=20
review by Tom Kelly, KC Sivaramakrishnan and Gabriel Scherer)=20

- #11238: Increase the default limit for the stack size to 128 Mi words,=20
i.e. 1 Gib for 64-bit platforms and 512 Mib for 32-bit platforms.=20
(Xavier Leroy, review by S=C3=A9bastien Hinderer)=20

* #11295: An ISO C 2011 compliant compiler, including full support for atom=
ic=20
types, is now required to build the OCaml runtime system.=20
(Xavier Leroy, review by David Allsopp and S=C3=A9bastien Hinderer)=20

- #10915, #11039, #11057, #11095, #11190: Implement quality treatment for=
=20
asynchronous actions in multicore. Reimplement the old behaviour of=20
`caml_process_pending*` for multicore.=20
(Guillaume Munch-Maccagnoni, review by Sadiq Jaffer and Gabriel Scherer)=20

- #11303: Ensure that GC is not invoked from bounds check failures=20
(Stephen Dolan, review by Sadiq Jaffer and Xavier Leroy)=20

- #11304: Fix data race on Windows file descriptors=20
(Olivier Nicole and Xavier Leroy, review by Xavier Leroy, David Allsopp,=20
and Sadiq Jaffer)=20

* #11337: pass 'flags' metadata to root scanners, to optimize stack=20
scanning in the bytecode interpreter.=20
Changes the interface of user-provided root-scanning hooks.=20
(Gabriel Scherer, review by Xavier Leroy,=20
Guillaume Munch-Maccagnoni, Sadiq Jaffer and Tom Kelly)=20

- #11144: Restore frame-pointers support for amd64=20
(Fabrice Buoro, review by Frederic Bour and KC Sivaramakrishnan)=20

* #11255: in the C interface, `&Field(v, i)` now has type `volatile value *=
`=20
instead of `value *` in OCaml 4. This makes the memory model=20
for mixed OCaml/C code better defined, but can cause warnings or type=20
errors in user C code.=20
(KC Sivaramakrishnan, review by Xavier Leroy, Gabriel Scherer and=20
Guillaume Munch-Maccagnoni, additional discussions with Stephen=20
Dolan and Luc Maranget)=20

- #5299, #4787, #11138, #11272, #11506: To help debugging, `Caml_state`=20
now dynamically checks that the domain lock is held, and fails=20
otherwise (with a fatal error at most entry points of the C API, or=20
systematically in debug mode). A new variable `Caml_state_opt` is=20
introduced, and is `NULL` when the domain lock is not held. This=20
allows to test from C code if the current thread holds the lock of=20
its domain.=20
(Guillaume Munch-Maccagnoni, review by Florian Angeletti, Damien=20
Doligez, Sadiq Jaffer, Xavier Leroy, and Gabriel Scherer)=20

- #11223: The serialization format of custom blocks changed in 4.08,=20
but the deserializer would still support the pre-4.08 format. OCaml=20
5.x removed support for this old format; provide a clear error message=20
in this case.=20
(Hugo Heuzard, review by Gabriel Scherer)=20

- #11504, #11522: Use static allocation in `caml_make_float_vect` in=20
no-flat-float-array mode, it's more efficient and avoids a a race condition=
=20
(Xavier Leroy, report by Guillaume Munch-Maccagnoni, review by David Allsop=
p)=20

- #11652: Fix benign off-by-one error in Windows implementation of caml_mem=
_map.=20
(David Allsopp, review by Gabriel Scherer)=20

- #11669, #11704: Fix construction of Effect.Unhandled exceptions in the=20
bytecode interpreter.=20
(David Allsopp and Xavier Leroy, report by Samuel Hym, review by Xavier Ler=
oy=20
and Gabriel Scherer)=20

### Code generation and optimizations:=20

- #10972: ARM64 multicore support: OCaml & C stack separation;=20
dynamic stack size checks; fiber and effects support.=20
(Tom Kelly and Xavier Leroy, review by KC Sivaramakrishnan, Xavier Leroy=20
Guillaume Munch-Maccagnoni, Eduardo Rafael, Stephen Dolan and=20
Gabriel Scherer)=20

* #10845 Emit frametable size on amd64 BSD (OpenBSD, FreeBSD, NetBSD) syste=
ms=20
(emitted for Linux in #8805)=20
(Hannes Mehnert, review by Nicol=C3=A1s Ojeda B=C3=A4r)=20

### Standard library:=20

- #10742: Use LXM as the pseudo-random number generator for module Random.=
=20
Add `Random.State.split` and `Random.split` to "split" a PRNG off=20
another PRNG.=20
(Xavier Leroy, review by Gabriel Scherer and Hugo Heuzard)=20

* #10867, #11345: Remove deprecated values: Array.create, Array.make_float,=
=20
Array.create_matrix, Bytes.uppercase, Bytes.lowercase, Bytes.capitalize,=20
Bytes.uncapitalize, Char.lowercase, Char.uppercase, Filename.temp_dir_name,=
=20
Int32.format, Int64.format, Nativeint.format, Format.bprintf, Format.kprint=
f,=20
Format.set_all_formatter_output_functions,=20
Format.get_all_formatter_output_functions,=20
Format.pp_set_all_formatter_output_functions,=20
Format.pp_get_all_formatter_output_functions, Format.pp_open_tag,=20
Format.pp_close_tag, Format.open_tag, Format.close_tag,=20
Format.formatter_tag_functions, Format.pp_set_formatter_tag_functions,=20
Format.pp_get_formatter_tag_functions, Format.set_formatter_tag_functions,=
=20
Format.get_formatter_tag_functions, Gc (mutability of the fields of type=20
Gc.control), Lazy.lazy_from_fun, Lazy.lazy_from_val, Lazy.lazy_is_val,=20
Obj.set_tag, Obj.truncate, Obj.final_tag, Obj.extension_constructor,=20
Obj.extension_name, Obj.extension_id, Scanf.stdib, Scanf.fscanf,=20
Scanf.kfscanf, Stdlib.( & ), Stdlib.( or ), String.set, String.copy,=20
String.fill, String.unsafe_set, String.unsafe_fill, String.uppercase,=20
String.lowercase, String.capitalize, String.uncapitalize, Thread.kill,=20
Thread.wait_write, Thread.wait_read, the whole ThreadUnix module, the=20
infix operator (.[]<-).=20
(Nicol=C3=A1s Ojeda B=C3=A4r, review by Damien Doligez)=20

* #10896: Remove Stream, Genlex and Pervasives. Also remove legacy standalo=
ne=20
bigarray library (the Bigarray module is now part of the standard library).=
=20
(Nicol=C3=A1s Ojeda B=C3=A4r, review by Kate Deplaix and Anil Madhavapeddy)=
=20

- #10921: Use getentropy, when available, to seed the generator during=20
`Random.self_init`=20
(Michael Hendricks, review by Gabriel Scherer, Xavier Leroy, and=20
Anil Madhavapeddy)=20

* #10924: Add deprecated attribute to Printexc.catch, Printf.kprintf and=20
Unix.SO_ERROR.=20
(Nicol=C3=A1s Ojeda B=C3=A4r, review by Damien Doligez)=20

- #10986: Add Scanf.sscanf_opt, Scanf.bscanf_opt and Scanf.scanf_opt.=20
(Nicol=C3=A1s Ojeda B=C3=A4r, review by Florian Angeletti and Gabriel Scher=
er)=20

* #11157: Rename "hash" in the "Hashtbl.SeededHashedType" signature to=20
"seeded_hash". This allows defining both seeded and unseeded hash functions=
 in=20
the same module.=20
(Nicol=C3=A1s Ojeda B=C3=A4r, review by Gabriel Scherer and Xavier Leroy)=
=20

- #8878: Add String.hash and String.seeded_hash.=20
(Tom Kelly, review by Alain Frisch and Nicol=C3=A1s Ojeda B=C3=A4r)=20

### Other libraries:=20

* #9071, #9100, #10935: Reimplement `Thread.exit()` as raising the=20
exception `Thread.Exit`, and mark `Thread.exit` as deprecated.=20
The new implementation changes the behavior compared with=20
the OCaml 4 implementation. For example, the new implementation=20
causes `Fun.finally` finalizers to be run and catch-all exception=20
handlers to prevent termination.=20
(Jacques-Henri Jourdan and Xavier Leroy, review by Damien Doligez,=20
Guillaume Munch-Maccagnoni, Gabriel Scherer, and Enguerrand Decorne)=20

- #11034: Dynlink library, add a global lock to make dynlinking=20
thread-safe.=20
(Florian Angeletti, review by Gabriel Scherer)=20

- #11087: deprecate Thread.wait_timed_read, Thread.wait_timed_write,=20
Thread.select, Thread.wait_pid. The same functionality is available in the=
=20
Unix module.=20
(Nicol=C3=A1s Ojeda B=C3=A4r, review by Anil Madhavapeddy)=20

- #11309, #11424, #11427, #11545: Add Domain.recommended_domain_count.=20
(Christiano Haesbaert, Konstantin Belousov, review by David Allsopp,=20
KC Sivaramakrishnan, Gabriel Scherer, Nicolas Ojeda Bar)=20

- #11461, #11466: Fix gethostbyaddr for IPv6 arguments and make it domain-s=
afe=20
(Olivier Nicole, Nicol=C3=A1s Ojeda B=C3=A4r, David Allsopp and Xavier Lero=
y,=20
review by the same)=20

- #11479: Make Unix.symlink domain-safe on Windows=20
(Olivier Nicole, review by Xavier Leroy and David Allsopp)=20

### Tools:=20

* #11004: Litmus tests for checking the implementation of the=20
memory model.=20
(Luc Maranget, review by Gabriel Scherer and Xavier Leroy)=20

- #11024: Handle alerts in ocamldoc.=20
The alert `[@@alert deprecated]` is handled specifically and it's no longer=
=20
needed to duplicate the deprecated annotation (the alert for the compiler a=
nd=20
the tag for the documentation). Every other alerts also appear in the=20
documentation.=20
(Jules Aguillon, review by Florian Angeletti)=20

- #11065: Port the bytecode debugger to 5.0, adding support for effect hand=
lers.=20
(Damien Doligez and @fabbing, review by @fabbing and Xavier Leroy)=20

- #11079: Add the -nobanners option to dumpobj.=20
(S=C3=A9bastien Hinderer, review by Gabriel Scherer and Vincent Laviron)=20

- #11100: Fix ocamltest to make sure failed tests are not counted as=20
"unexpected error".=20
(Damien Doligez, review by S=C3=A9bastien Hinderer)=20

- #11245: Merge the common code of ocamlcp and ocamloptp into a single modu=
le.=20
(David Allsopp, review by S=C3=A9bastien Hinderer)=20

- #11382: OCamlmktop use a new initialization module "OCamlmktop_init" to=
=20
preserve backward-compatibility with user-module provided modules that inst=
all=20
toplevel printers.=20
(Florian Angeletti, review by Gabriel Scherer and David Allsopp)=20

### Manual and documentation:=20

- #11058: runtime/HACKING.adoc tips on debugging the runtime=20
(Gabriel Scherer, review by Enguerrand Decorne and Nicol=C3=A1s Ojeda B=C3=
=A4r)=20

- #11093: Add an effect handlers tutorial=20
(KC Sivaramakrishnan, review by Fran=C3=A7ois Pottier, Gabriel Scherer, Fra=
n=C3=A7ois=20
Bobot and Wiktor Kuchta)=20

- #11192: Better documentation for condition variables.=20
(Fran=C3=A7ois Pottier, review by Luc Maranget, Xavier Leroy, and Wiktor Ku=
chta)=20

- #11093: Add tutorials on parallelism features and the relaxed memory mode=
l=20
(KC Sivaramakrishnan, review by Damien Doligez, Anil Madhavapeddy, Gabriel=
=20
Scherer, Thomas Leonard, Tom Ridge, Xavier Leroy, Luc Maranget, Fabrice=20
Buoro, Olivier Nicole, Guillaume Munch-Maccagnoni, Jacques-Henri Jourdan)=
=20

- #11640: Add Flambda commonly-used options to the ocamlopt manpage=20
(Amandine Nangah, review by David Allsopp, Florian Angeletti,=20
S=C3=A9bastien Hinderer, and Vincent Laviron)=20

- #11676: Fix missing since annotation in the `Sys` and `Format` modules=20
(Github user Bukolab99, review by Florian Angeletti)=20

- #11813: Make new multicore chapters easier to discover, and emphasize imp=
act=20
on C bindings.=20
(Edwin T=C3=B6r=C3=B6k, review by KC Sivaramakrishnan, and Florian Angelett=
i)=20

### Compiler user-interface and warnings:=20

- #9140, #11131: New command-line flag -nocwd to not include implicit=20
the current directory to the load path.=20
(Thomas Roglin, review by Gabriel Scherer and Nicol=C3=A1s Ojeda B=C3=A4r)=
=20

- #11089: Add 'since <version>' information to compiler warnings.=20
(Andr=C3=A9 Maroneze, review by Florian Angeletti and Gabriel Scherer)=20

- #10909: Disable warning 59 (assignment to immutable blocks) unless flambd=
a=20
invariant checks are enabled.=20
(Vincent Laviron, review by Gabriel Scherer)=20

- #10981, #11276: Implement a -cmi-file option for ocamlc and ocamlopt.=20
(S=C3=A9bastien Hinderer, review by Damien Doligez, Daniel B=C3=BCnzli and=
=20
Florian Angeletti)=20

* #11049: Stop padding 1-digit compiler minor version numbers.=20
(So for instance OCaml 5.0 rather than 5.00)=20
(S=C3=A9bastien Hinderer, review by David Allsopp, Florian Angeletti and=20
Xavier Leroy)=20

- #11184, #11670: Stop calling ranlib on created / installed libraries=20
(S=C3=A9bastien Hinderer and Xavier Leroy, review by the same)=20

- #11253: Deprecate `ocaml script` and `ocamlnat` script where `script` has=
 no=20
extension and is an implicit basename.=20
(David Allsopp, review by Florian Angeletti and S=C3=A9bastien Hinderer)=20

### Internal/compiler-libs changes:=20

- #10878, #10909: restore flambda after the Multicore merge.=20
(Vincent Laviron, review by Gabriel Scherer and Xavier Leroy)=20

- #10864, #10888: restore afl-fuzz mode for sequential programs.=20
(Jan Midtgaard, review by Xavier Leroy and Gabriel Scherer)=20

- #11008, #11047: rework GC statistics in the Multicore runtime=20
(Gabriel Scherer, review by Enguerrand Decorne)=20

- #11058: basic debugging documentation in runtime/HACKING.adoc=20
(Gabriel Scherer, review by Enguerrand Decorne and Nicol=C3=A1s Ojeda B=C3=
=A4r)=20

- #11199: Stop installing topdirs.cmi twice. The toplevel now reads topdirs=
.cmi=20
from +compiler-libs, as the debugger does.=20
(David Allsopp, review by S=C3=A9bastien Hinderer)=20

- #11007, #11399: META files for the stdlib, compiler-libs and other librar=
ies=20
(unix, dynlink, str, runtime_events, threads, ocamldoc) are now installed=
=20
along with the compiler.=20
(David Allsopp, Florian Angeletti, Nicol=C3=A1s Ojeda B=C3=A4r and S=C3=A9b=
astien Hinderer,=20
review by Daniel B=C3=BCnzli, Kate Deplaix, Anil Madhavapeddy and Gabriel S=
cherer)=20

### Build system:=20

* #10893: Remove configuration options --disable-force-safe-string and=20
DEFAULT_STRING=3Dunsafe as well as --enable-force-safe-string and=20
DEFAULT_STRING=3Dsafe which are now the default unconditionally.=20
(Kate Deplaix, review by Gabriel Scherer and David Allsopp)=20

- #11092: Build native-code compilers on OpenBSD/aarch64.=20
(Christopher Zimmermann, review by Anil Madhavapeddy)=20

- #11126: Build system: make it possible to choose which ocamldep=20
(and flags) to use when computing dependencies for the compiler.=20
Add a -no-slash option to ocamldep to let users override -slash.=20
(S=C3=A9bastien Hinderer, review by David Allsopp)=20

- #11147: Factorize the stdlib-related compilation flags. Make it=20
possible to control them consistently through the STDLIBFLAGS=20
build variable. Make sure ocamldoc and ocamllex get compiled and=20
linked with debugging information (-g).=20
(S=C3=A9bastien Hinderer, review by Gabriel Scherer)=20

- #11149: Make the bootstrap process reproducible on systems with non-big-e=
ndian=20
floating point. If the boot/ artefacts are up-to-date, this means that runn=
ing=20
make bootstrap on any platform should not change the images in boot/ and pa=
ves=20
the way for automated testing that the bootstrap is repeatable.=20
(David Allsopp, review by Damien Doligez and S=C3=A9bastien Hinderer)=20

- #11160: otherlibs: merge win32unix into unix.=20
(S=C3=A9bastien Hinderer, review by David Allsopp, Nicol=C3=A1s Ojeda B=C3=
=A4r,=20
Xavier Leroy, Vincent Laviron and Antonin D=C3=A9cimo)=20

* #11198, #11298: Install the Dynlink, Str and Unix libraries to individual=
=20
subdirectories of LIBDIR. The compiler, debugger and toplevel automatically=
=20
add `-I +lib` if required, but display an alert.=20
(David Allsopp, review by Florian Angeletti, Nicol=C3=A1s Ojeda B=C3=A4r,=
=20
Valentin Gatien-Baron and S=C3=A9bastien Hinderer)=20

- #11200: Install ocamlprof's Profiling runtime module to a +profiling,=20
removing it from the default namespace.=20
(David Allsopp, review by S=C3=A9bastien Hinderer)=20

- #11294: Switch minimum required autoconf to 2.71.=20
(David Allsopp, review by Xavier Leroy)=20

- #11370, #11373: Don't pass CFLAGS to flexlink during configure.=20
(David Allsopp, report by William Hu, review by Xavier Leroy and=20
S=C3=A9bastien Hinderer)=20

- #11487: Thwart FMA test optimization during configure=20
(William Hu, review by David Allsopp and S=C3=A9bastien Hinderer)=20

- #11097: Build native-code compilers on NetBSD/aarch64=20
(Kate Deplaix, review by Anil Madhavapeddy)=20

### Bug fixes:=20

- #10768, #11340: Fix typechecking regression when combining first class=20
modules and GADTs.=20
(Jacques Garrigue, report by Fran=C3=A7ois Thir=C3=A9, review by Matthew Ry=
an)=20

- #10790: don't drop variance and injectivity annotations when pretty print=
ing=20
`with` constraints (for example, `with type +!'a t =3D ...`).=20
(Florian Angeletti, report by Luke Maurer, review by Matthew Ryan and=20
Gabriel Scherer)=20

- #11167: Fix memory leak from signal stack.=20
(Antoni =C5=BBewier=C5=BCejew, review by Gabriel Scherer and Enguerrand Dec=
orne)=20

- #11112: harden -use-runtime against spaces or quotes in the provided path=
=20
(Gabriel Scherer, report by Brahima Dibassi, review by David Allsopp)=20

- #11068, #11070: Fix typo in function name given in Unix_error exception f=
or=20
Unix.readlink on Windows.=20
(David Allsopp, report by Xia Li-yao)=20

- #10807: Don't duplicate standard handles in the child process=20
spawned by win32unix Unix.create_process if the handles were already=20
inheritable. Fix broken signalling of EOF on standard handles if=20
they were already inheritable.=20
(Antonin D=C3=A9cimo, review by Xavier Leroy and Nicol=C3=A1s Ojeda B=C3=A4=
r)=20

- #10868: Fix off-by-1 bug when initializing frame hashtables=20
(Jonah Beckford, review by Tom Kelly, Nicol=C3=A1s Ojeda B=C3=A4r and=20
KC Sivaramakrishnan)=20

- #11077: Make dumpobj compatible with absence of naked pointer support=20
(Olivier Nicole and Jan Midtgaard, review by Gabriel Scherer)=20

- #11111: fix fork() usage in ocamltest C code.=20
When calling fork() from C code with the Multicore runtime active,=20
one needs to call caml_atfork_hook() on the forked child before it=20
can use the OCaml runtime.=20
(Gabriel Scherer, review by Xavier Leroy, report by Brahima Dibassi)=20

- #10809: Use the WSA_FLAG_NO_HANDLE_INHERIT on Windows when creating=20
sockets with WSASocket if the cloexec (non-inheritable) parameter is=20
true. Fixes a race condition where a child process could inherit the=20
socket and deadlock the parent.=20
(Antonin D=C3=A9cimo, review by Xavier Leroy)=20

- #11194, #11609: Fix inconsistent type variable names in "unbound type var=
"=20
messages=20
(Ulysse G=C3=A9rard and Florian Angeletti, review Florian Angeletti and=20
Gabriel Scherer)=20

- #11204: Fix regression introduced in 4.14.0 that would trigger Warning 17=
 when=20
calling virtual methods introduced by constraining the self type from withi=
n=20
the class definition.=20
(Nicol=C3=A1s Ojeda B=C3=A4r, review by Leo White)=20

- #11263, #11267: caml/misc.h: check whether `_MSC_VER` is defined before u=
sing=20
it to ensure that the headers can always be used in code which turns on=20
-Wundef (or equivalent).=20
(David Allsopp and Nicol=C3=A1s Ojeda B=C3=A4r, review by Nicol=C3=A1s Ojed=
a B=C3=A4r and=20
S=C3=A9bastien Hinderer)=20

- #11289, #11405: fix some leaks on systhread termination=20
(Fabrice Buoro, Enguerrand Decorne, Gabriel Scherer,=20
review by Xavier Leroy and Florian Angeletti, report by Romain Beauxis)=20

- #11314, #11416: fix non-informative error message for module inclusion=20
(Florian Angeletti, report by Thierry Martinez, review by Gabriel Scherer)=
=20

- #11358, #11379: Refactor the initialization of bytecode threading,=20
This avoids a "dangling pointer" warning of GCC 12.1.=20
(Xavier Leroy, report by Arma=C3=ABl Gu=C3=A9neau, review by Gabriel Schere=
r)=20

- #11387, module type with constraints no longer crash the compiler in pres=
ence=20
of both shadowing warnings and the `-bin-annot` compiler flag.=20
(Florian Angeletti, report by Christophe Raffalli, review by Gabriel Schere=
r)=20

- #11392, #11392: assertion failure with -rectypes and external definitions=
=20
(Gabriel Scherer, review by Florian Angeletti, report by Dmitrii Kosarev)=
=20

- #11417: Fix regression allowing virtual methods in non-virtual classes.=
=20
(Leo White, review by Florian Angeletti)=20

- #11468: Fix regression from #10186 (OCaml 4.13) detecting IPv6 on Windows=
 for=20
mingw-w64 i686 port.=20
(David Allsopp, review by Xavier Leroy and S=C3=A9bastien Hinderer)=20

- #11482, #11542: Fix random crash in large closure allocation=20
(Damien Doligez, report by Thierry Martinez and Vincent Laviron, review by=
=20
Xavier Leroy)=20

- #11508, #11509: make Bytes.escaped domain-safe=20
(Christiano Haesbaert and Gabriel Scherer,=20
review by Xavier Leroy,=20
report by Jan Midtgaard and Tom Kelly)=20

- #11516, #11524: Fix the `deprecated_mutable` attribute.=20
(Chris Casinghino, review by Nicol=C3=A1s Ojeda B=C3=A4r and Florian Angele=
tti)=20

- #11576: Fix bug in Bigarray.Genarray.init in the the case of zero-dimensi=
onal=20
arrays.=20
(Nicol=C3=A1s Ojeda B=C3=A4r, Jeremy Yallop, report by Masayuki Takeda, rev=
iew by Jeremy=20
Yallop and Florian Angeletti)=20

- #11587: Prevent integer comparison from being used on pointers=20
(Vincent Laviron, review by Gabriel Scherer)=20

- #11622: Prevent stack overflow when printing a constructor or record=20
mismatch error involving recursive types.=20
(Florian Angeletti, review by Gabriel Scherer)=20

- #11662, #11673: fix a memory leak when using Dynlink,=20
the bug was only present in development version of OCaml 5.=20
(Stephen Dolan, report by Andre Maroneze, review by Gabriel Scherer)=20

- #11732: Ensure that types from packed modules are always generalised=20
(Stephen Dolan and Leo White, review by Jacques Garrigue)=20

- #11737: Fix segfault condition in Unix.stat under Windows in the presence=
 of=20
multiple threads.=20
(Marc Lasson, Nicol=C3=A1s Ojeda B=C3=A4r, review by Gabriel Scherer and Da=
vid Allsopp)=20

- #11776: Extend environment with functor parameters in `strengthen_lazy`.=
=20
(Chris Casinghino and Luke Maurer, review by Gabriel Scherer)=20

- #11533, #11534: follow synonyms again in #show_module_type=20
(this had stopped working in 4.14.0)=20
(Gabriel Scherer, review by Jacques Garrigue, report by Yaron Minsky)=20

--=_7222fbed-f645-435c-a7e6-2d84487f8df4
Content-Type: text/html; charset=utf-8
Content-Transfer-Encoding: quoted-printable

<html><body><div style=3D"font-family: arial, helvetica, sans-serif; font-s=
ize: 12pt; color: #000000"><div><div>Dear OCaml users,<br><br>We have the p=
leasure of celebrating the birthdays of Jane Austen and Arthur C. Clarke by=
<br>announcing the release of OCaml version 5.0.0.<br><br>The highlight of =
this new major version of OCaml is the long-awaited runtime support<br>for =
shared memory parallelism and effect handlers.<br><br>This multicore suppor=
t is the culmination of more than 8 years of effort,<br>and required a full=
 rewrite of the OCaml runtime environment.<br>Consequently, OCaml 5.0.0 is =
expected to be a more experimental version of<br>OCaml than the usual OCaml=
 releases.<br><br>For instance, in this release the native compiler only su=
pports the x86-64 and arm64 architectures. In terms of operating systems, L=
inux, BSDs, macOS and mingw64 on Windows<br>are supported.<br><br>We are pl=
anning to restore the support for most previously supported architectures a=
nd operating systems, and address remaining known issues over the course of=
 the next year.<br><br>Don't let those words of caution hinder your experim=
entation with OCaml 5:<br>OCaml 5 as a language is fully compatible with OC=
aml 4 down to the performance<br>characteristics of your programs. In other=
 words, any code that works with OCaml 4 should work the same with OCaml 5.=
<br>Installation instructions are available below.<br><br>The currently kno=
wn exceptions to this rule are:<br>- the removal of many long-deprecated fu=
nctions and modules<br>- changes to the internal runtime API<br>- the perfo=
rmance of ephemerons is currently (and temporarily) strongly degraded.<br><=
br>Please report any unexpected behaviours on the OCaml issue tracker<br>(a=
t https://github.com/ocaml/ocaml/issues) and post any questions or comments=
<br>you might have on our discussion forums (https://discuss.ocaml.org).<br=
><br>During the maturing period for OCaml 5, the OCaml 4.14 branch will be =
maintained<br>by backporting bug fixes from the OCaml 5 branch at regular i=
ntervals.<br>The next release on the OCaml 4.14 branch, OCaml 4.14.1, shoul=
d soon follow this release.<br><br>The full list of changes can be found in=
 the changelog below.<br><br>Happy hacking,<br><br>-- Florian Angeletti for=
 the OCaml team.<br><br><br><br>Installation Instructions<br>--------------=
-----------<br><br>The base compiler can be installed as an opam switch wit=
h the following commands:<br><br>opam update<br>opam switch create 5.0.0<br=
><br><br>It might be also interesting to check the new support for parallel=
ism by installing the `domainslib` library with<br><br>opam install domains=
lib<br><br>The source code for the release candidate is also directly avail=
able on:<br><br>* https://github.com/ocaml/ocaml/archive/5.0.0.tar.gz<br>* =
https://caml.inria.fr/pub/distrib/ocaml-5.0/ocaml-5.0.0.tar.gz<br><br>### F=
ine-Tuned Compiler Configuration<br><br>If you want to tweak the configurat=
ion of the compiler, you can switch to the option variant with:<br><br>opam=
 update<br>opam switch create &lt;switch_name&gt; ocaml-variants.5.0.0+opti=
ons &lt;option_list&gt;<br><br>where `&lt;option_list&gt;` is a comma-separ=
ated list of `ocaml-option-*` packages. For instance, for a `flambda` and `=
no-flat-float-array` switch:<br><br>opam switch create 5.0.0+flambda+nffa o=
caml-variants.5.0.0+options ocaml-option-flambda ocaml-option-no-flat-float=
-array<br><br><br>The command line above is slightly more complicated for o=
pam versions before 2.1:<br><br><br>opam update<br>opam switch create &lt;s=
witch_name&gt; --packages=3Docaml-variants.5.0.0+options,&lt;option_list&gt=
;<br><br>In both cases, all available options can be listed with `opam sear=
ch ocaml-option`.<br><br>New manual sections:<br>--------------------<br><b=
r>- Parallel programming (https://v2.ocaml.org/releases/5.0/manual/parallel=
ism.html)<br>- Memory model: The hard bits (https://v2.ocaml.org/releases/5=
.0/manual/memorymodel.html)<br>- Effect handlers (https://v2.ocaml.org/rele=
ases/5.0/manual/effects.html)<br><br><br>Changelog for OCaml 5.0.0 (16 Dece=
mber 2022)<br>--------------------------------------------<br><br><br>- #10=
831: Multicore OCaml<br>&nbsp; (Enguerrand Decorne, Stephen Dolan, Tom Kell=
y, Sadiq Jaffer,<br>&nbsp; Anil Madhavapeddy, Sudha Parimala, KC Sivaramakr=
ishnan,<br>&nbsp; Leo White, the Tarides multicore team,<br>&nbsp; review b=
y Florian Angeletti, Damien Doligez, Xavier Leroy,<br>&nbsp; Guillaume Munc=
h-Maccagnoni, Olivier Nicole, Nicol=C3=A1s Ojeda B=C3=A4r,<br>&nbsp; Gabrie=
l Scherer, the OCaml core development team, and many<br>&nbsp; other valued=
 reviewers.)<br><br>### Language features:<br><br>### Runtime system:<br><b=
r>- #11400: Runtime events counters fixes<br>&nbsp; Fixes mismatch between =
OCaml and C APIs, removes events from 4.x that<br>&nbsp; are not present in=
 the 5.0 GC and adds some missing probes.<br>&nbsp; (Sadiq Jaffer, review b=
y Gabriel Scherer, Florian Angeletti)<br><br>- #11368: Runtime events buffe=
r size OCAMLRUNPARAMS fix<br>&nbsp; The runtime events buffer size can now =
be set via the 'e' OCAMLRUNPARAM.<br>&nbsp; This is previously mistakenly e=
nabled/disabled tracing instead.<br>&nbsp; (Sadiq Jaffer, review by KC Siva=
ramakrishnan, David Allsopp, Damien Doligez)<br><br>- #11308: Add environme=
nt variable to preserve runtime_events after exit<br>&nbsp; If the environm=
ent variable OCAML_RUNTIME_EVENTS_PRESERVE exists then the<br>&nbsp; runtim=
e will not remove the runtime events ring buffers at exit. This<br>&nbsp; m=
akes tracing very short running programs more reliable.<br>&nbsp; (Sadiq Ja=
ffer, review by KC Sivaramakrishnan)<br><br>- #10964: Ring-buffer based run=
time tracing (runtime_events)<br>&nbsp; Runtime_events is a very low overhe=
ad runtime tracing system designed for<br>&nbsp; continuous monitoring of O=
Caml applications.<br>&nbsp; (Sadiq Jaffer, review by Anil Madhavapeddy, En=
guerrand Decorne,<br>&nbsp; Richard Warburton, Gabriel Scherer, Sabine Schm=
altz, Florian Angeletti,<br>&nbsp; Patrick Ferris, Tom Kelly)<br><br>* #107=
23: do not use `-flat-namespace` linking for macOS.<br>&nbsp; (Carlo Cabrer=
a, review by Damien Doligez)<br><br>* #10863, #10933: Remove support for ol=
d, unprefixed C runtime function names<br>&nbsp; such as `alloc`.&nbsp; The=
 new names prefixed with `caml_` must be used instead,<br>&nbsp; such as `c=
aml_alloc`.&nbsp; Consequently, it is no longer needed to define<br>&nbsp; =
`CAML_NAME_SPACE` to avoid bringing unprefixed names into scope: this is no=
w<br>&nbsp; the default behavior.<br>&nbsp; (Nicol=C3=A1s Ojeda B=C3=A4r, r=
eview by Xavier Leroy)<br><br>- #10902: Do not register empty code fragment=
s in natdynlink.<br>&nbsp; (David Allsopp, review by Xavier Leroy and Damie=
n Doligez)<br><br>- #10965: `caml_fatal_error_hook`, GC timing hooks, and<b=
r>&nbsp; `caml_scan_roots_hook` are now atomic variables. Restore GC timing=
<br>&nbsp; hooks in multicore.<br>&nbsp; (Guillaume Munch-Maccagnoni, revie=
w by Enguerrand Decorne, Xavier<br>&nbsp; Leroy, Gabriel Scherer, and KC Si=
varamakrishnan)<br><br>- #11209: Add a public and thread-safe timing hook r=
unning at domain<br>&nbsp; termination, after this domain has stopped runni=
ng any OCaml code:<br>&nbsp; `caml_domain_terminated_hook`. This can be use=
ful for implementing<br>&nbsp; domain-local state in C.<br>&nbsp; (Guillaum=
e Munch-Maccagnoni, review by Xavier Leroy and Gabriel<br>&nbsp; Scherer)<b=
r><br>- #10875, #11731: Add option to allocate fiber stacks and sigaltstack=
s with<br>&nbsp; mmap(MAP_STACK) instead of malloc. This is exposed via a c=
onfigure<br>&nbsp; --enable-mmap-map-stack option, and is enabled by defaul=
t on OpenBSD where<br>&nbsp; it is mandatory.<br>&nbsp; (Anil Madhavapeddy,=
 review by Gabriel Scherer, Tom Kelly,<br>&nbsp;&nbsp; Michael Hendricks an=
d KC Sivaramakrishnan).<br><br>- #10950: Do not use mmap to allocate Caml_s=
tate.<br>&nbsp; In order to reduce virtual memory usage, we dynamically all=
ocate<br>&nbsp; the domain_state structure.<br>&nbsp; (Enguerrand Decorne, =
KC Sivaramakrishnan and Tom Kelly,<br>&nbsp; review by Anil Madhavapeddy an=
d Gabriel Scherer)<br><br>- #11010: Use strerror_r for reentrant error stri=
ng conversion.<br>&nbsp; (Anil Madhavapeddy and Xavier Leroy, review by sam=
e and Edwin T=C3=B6r=C3=B6k)<br><br>- #11002, #11066, #11086: Do not use Be=
gin_roots/End_roots macros in<br>&nbsp; the runtime system.&nbsp; Also fix =
a missing root registration in the<br>&nbsp; implementation of Unix.write o=
n Windows.<br>&nbsp; (Nicol=C3=A1s Ojeda B=C3=A4r, Daniel B=C3=BCnzli and A=
ntonin D=C3=A9cimo,<br>&nbsp;&nbsp; review by Xavier Leroy and David Allsop=
p)<br><br>- #11022: Track GC work for all managed bigarray allocations<br>&=
nbsp; (Stephen Dolan, report by Andrew Hunter, review by Damien Doligez)<br=
><br>- #10802: Use 4.12 value macros and helpers in C code<br>&nbsp; (Anton=
in D=C3=A9cimo, review by Gabriel Scherer)<br><br>- #11105: Fix handling of=
 fiber stack cache with multiple domains<br>&nbsp; (Jon Ludlam, KC Sivarama=
krishnan and Tom Kelly)<br><br>- #11054: Respect user provided maximum stac=
k space<br>&nbsp; Make sure the stack we initially request is sized accordi=
ngly to<br>&nbsp; the user provided settings. tmc/stack_space is also updat=
ed by<br>&nbsp; this PR in order to account for this change.<br>&nbsp; (Eng=
uerrand Decorne, report by Jon Ludlam,<br>&nbsp; review by Tom Kelly, KC Si=
varamakrishnan and Gabriel Scherer)<br><br>- #11238: Increase the default l=
imit for the stack size to 128 Mi words,<br>&nbsp; i.e. 1 Gib for 64-bit pl=
atforms and 512 Mib for 32-bit platforms.<br>&nbsp; (Xavier Leroy, review b=
y S=C3=A9bastien Hinderer)<br><br>* #11295: An ISO C 2011 compliant compile=
r, including full support for atomic<br>&nbsp; types, is now required to bu=
ild the OCaml runtime system.<br>&nbsp; (Xavier Leroy, review by David Alls=
opp and S=C3=A9bastien Hinderer)<br><br>- #10915, #11039, #11057, #11095, #=
11190: Implement quality treatment for<br>&nbsp; asynchronous actions in mu=
lticore. Reimplement the old behaviour of<br>&nbsp; `caml_process_pending*`=
 for multicore.<br>&nbsp; (Guillaume Munch-Maccagnoni, review by Sadiq Jaff=
er and Gabriel Scherer)<br><br>- #11303: Ensure that GC is not invoked from=
 bounds check failures<br>&nbsp; (Stephen Dolan, review by Sadiq Jaffer and=
 Xavier Leroy)<br><br>- #11304: Fix data race on Windows file descriptors<b=
r>&nbsp; (Olivier Nicole and Xavier Leroy, review by Xavier Leroy, David Al=
lsopp,<br>&nbsp;&nbsp; and Sadiq Jaffer)<br><br>* #11337: pass 'flags' meta=
data to root scanners, to optimize stack<br>&nbsp; scanning in the bytecode=
 interpreter.<br>&nbsp; Changes the interface of user-provided root-scannin=
g hooks.<br>&nbsp; (Gabriel Scherer, review by Xavier Leroy,<br>&nbsp;&nbsp=
; Guillaume Munch-Maccagnoni, Sadiq Jaffer and Tom Kelly)<br><br>- #11144: =
Restore frame-pointers support for amd64<br>&nbsp; (Fabrice Buoro, review b=
y Frederic Bour and KC Sivaramakrishnan)<br><br>* #11255: in the C interfac=
e, `&amp;Field(v, i)` now has type `volatile value *`<br>&nbsp; instead of =
`value *` in OCaml 4.&nbsp; This makes the memory model<br>&nbsp; for mixed=
 OCaml/C code better defined, but can cause warnings or type<br>&nbsp; erro=
rs in user C code.<br>&nbsp; (KC Sivaramakrishnan, review by Xavier Leroy, =
Gabriel Scherer and<br>&nbsp; Guillaume Munch-Maccagnoni, additional discus=
sions with Stephen<br>&nbsp; Dolan and Luc Maranget)<br><br>- #5299, #4787,=
 #11138, #11272, #11506: To help debugging, `Caml_state`<br>&nbsp; now dyna=
mically checks that the domain lock is held, and fails<br>&nbsp; otherwise =
(with a fatal error at most entry points of the C API, or<br>&nbsp; systema=
tically in debug mode). A new variable `Caml_state_opt` is<br>&nbsp; introd=
uced, and is `NULL` when the domain lock is not held. This<br>&nbsp; allows=
 to test from C code if the current thread holds the lock of<br>&nbsp; its =
domain.<br>&nbsp; (Guillaume Munch-Maccagnoni, review by Florian Angeletti,=
 Damien<br>&nbsp; Doligez, Sadiq Jaffer, Xavier Leroy, and Gabriel Scherer)=
<br><br>- #11223: The serialization format of custom blocks changed in 4.08=
,<br>&nbsp; but the deserializer would still support the pre-4.08 format.&n=
bsp; OCaml<br>&nbsp; 5.x removed support for this old format; provide a cle=
ar error message<br>&nbsp; in this case.<br>&nbsp; (Hugo Heuzard, review by=
 Gabriel Scherer)<br><br>- #11504, #11522: Use static allocation in `caml_m=
ake_float_vect` in<br>&nbsp; no-flat-float-array mode, it's more efficient =
and avoids a a race condition<br>&nbsp; (Xavier Leroy, report by Guillaume =
Munch-Maccagnoni, review by David Allsopp)<br><br>- #11652: Fix benign off-=
by-one error in Windows implementation of caml_mem_map.<br>&nbsp; (David Al=
lsopp, review by Gabriel Scherer)<br><br>- #11669, #11704: Fix construction=
 of Effect.Unhandled exceptions in the<br>&nbsp; bytecode interpreter.<br>&=
nbsp; (David Allsopp and Xavier Leroy, report by Samuel Hym, review by Xavi=
er Leroy<br>&nbsp; and Gabriel Scherer)<br><br>### Code generation and opti=
mizations:<br><br>- #10972: ARM64 multicore support: OCaml &amp; C stack se=
paration;<br>&nbsp; dynamic stack size checks; fiber and effects support.<b=
r>&nbsp; (Tom Kelly and Xavier Leroy, review by KC Sivaramakrishnan, Xavier=
 Leroy<br>&nbsp; Guillaume Munch-Maccagnoni, Eduardo Rafael, Stephen Dolan =
and<br>&nbsp; Gabriel Scherer)<br><br>* #10845 Emit frametable size on amd6=
4 BSD (OpenBSD, FreeBSD, NetBSD) systems<br>&nbsp; (emitted for Linux in #8=
805)<br>&nbsp; (Hannes Mehnert, review by Nicol=C3=A1s Ojeda B=C3=A4r)<br><=
br>### Standard library:<br><br>- #10742: Use LXM as the pseudo-random numb=
er generator for module Random.<br>&nbsp; Add `Random.State.split` and `Ran=
dom.split` to "split" a PRNG off<br>&nbsp; another PRNG.<br>&nbsp; (Xavier =
Leroy, review by Gabriel Scherer and Hugo Heuzard)<br><br>* #10867, #11345:=
 Remove deprecated values: Array.create, Array.make_float,<br>&nbsp; Array.=
create_matrix, Bytes.uppercase, Bytes.lowercase, Bytes.capitalize,<br>&nbsp=
; Bytes.uncapitalize, Char.lowercase, Char.uppercase, Filename.temp_dir_nam=
e,<br>&nbsp; Int32.format, Int64.format, Nativeint.format, Format.bprintf, =
Format.kprintf,<br>&nbsp; Format.set_all_formatter_output_functions,<br>&nb=
sp; Format.get_all_formatter_output_functions,<br>&nbsp; Format.pp_set_all_=
formatter_output_functions,<br>&nbsp; Format.pp_get_all_formatter_output_fu=
nctions, Format.pp_open_tag,<br>&nbsp; Format.pp_close_tag, Format.open_tag=
, Format.close_tag,<br>&nbsp; Format.formatter_tag_functions, Format.pp_set=
_formatter_tag_functions,<br>&nbsp; Format.pp_get_formatter_tag_functions, =
Format.set_formatter_tag_functions,<br>&nbsp; Format.get_formatter_tag_func=
tions, Gc (mutability of the fields of type<br>&nbsp; Gc.control), Lazy.laz=
y_from_fun, Lazy.lazy_from_val, Lazy.lazy_is_val,<br>&nbsp; Obj.set_tag, Ob=
j.truncate, Obj.final_tag, Obj.extension_constructor,<br>&nbsp; Obj.extensi=
on_name, Obj.extension_id, Scanf.stdib, Scanf.fscanf,<br>&nbsp; Scanf.kfsca=
nf, Stdlib.( &amp; ), Stdlib.( or ), String.set, String.copy,<br>&nbsp; Str=
ing.fill, String.unsafe_set, String.unsafe_fill, String.uppercase,<br>&nbsp=
; String.lowercase, String.capitalize, String.uncapitalize, Thread.kill,<br=
>&nbsp; Thread.wait_write, Thread.wait_read, the whole ThreadUnix module, t=
he<br>&nbsp; infix operator (.[]&lt;-).<br>&nbsp; (Nicol=C3=A1s Ojeda B=C3=
=A4r, review by Damien Doligez)<br><br>* #10896: Remove Stream, Genlex and =
Pervasives. Also remove legacy standalone<br>&nbsp; bigarray library (the B=
igarray module is now part of the standard library).<br>&nbsp; (Nicol=C3=A1=
s Ojeda B=C3=A4r, review by Kate Deplaix and Anil Madhavapeddy)<br><br>- #1=
0921: Use getentropy, when available, to seed the generator during<br>&nbsp=
; `Random.self_init`<br>&nbsp; (Michael Hendricks, review by Gabriel Schere=
r, Xavier Leroy, and<br>&nbsp; Anil Madhavapeddy)<br><br>* #10924: Add depr=
ecated attribute to Printexc.catch, Printf.kprintf and<br>&nbsp; Unix.SO_ER=
ROR.<br>&nbsp; (Nicol=C3=A1s Ojeda B=C3=A4r, review by Damien Doligez)<br><=
br>- #10986: Add Scanf.sscanf_opt, Scanf.bscanf_opt and Scanf.scanf_opt.<br=
>&nbsp; (Nicol=C3=A1s Ojeda B=C3=A4r, review by Florian Angeletti and Gabri=
el Scherer)<br><br>* #11157: Rename "hash" in the "Hashtbl.SeededHashedType=
" signature to<br>&nbsp; "seeded_hash". This allows defining both seeded an=
d unseeded hash functions in<br>&nbsp; the same module.<br>&nbsp; (Nicol=C3=
=A1s Ojeda B=C3=A4r, review by Gabriel Scherer and Xavier Leroy)<br><br>- #=
8878: Add String.hash and String.seeded_hash.<br>&nbsp; (Tom Kelly, review =
by Alain Frisch and Nicol=C3=A1s Ojeda B=C3=A4r)<br><br>### Other libraries=
:<br><br>* #9071, #9100, #10935: Reimplement `Thread.exit()` as raising the=
<br>&nbsp; exception `Thread.Exit`, and mark `Thread.exit` as deprecated.<b=
r>&nbsp; The new implementation changes the behavior compared with<br>&nbsp=
; the OCaml 4 implementation.&nbsp; For example, the new implementation<br>=
&nbsp; causes `Fun.finally` finalizers to be run and catch-all exception<br=
>&nbsp; handlers to prevent termination.<br>&nbsp; (Jacques-Henri Jourdan a=
nd Xavier Leroy, review by Damien Doligez,<br>&nbsp; Guillaume Munch-Maccag=
noni, Gabriel Scherer, and Enguerrand Decorne)<br><br>- #11034: Dynlink lib=
rary, add a global lock to make dynlinking<br>&nbsp; thread-safe.<br>&nbsp;=
 (Florian Angeletti, review by Gabriel Scherer)<br><br>- #11087: deprecate =
Thread.wait_timed_read, Thread.wait_timed_write,<br>&nbsp; Thread.select, T=
hread.wait_pid. The same functionality is available in the<br>&nbsp; Unix m=
odule.<br>&nbsp; (Nicol=C3=A1s Ojeda B=C3=A4r, review by Anil Madhavapeddy)=
<br><br>- #11309, #11424, #11427, #11545: Add Domain.recommended_domain_cou=
nt.<br>&nbsp; (Christiano Haesbaert, Konstantin Belousov, review by David A=
llsopp,<br>&nbsp; KC Sivaramakrishnan, Gabriel Scherer, Nicolas Ojeda Bar)<=
br><br>- #11461, #11466: Fix gethostbyaddr for IPv6 arguments and make it d=
omain-safe<br>&nbsp; (Olivier Nicole, Nicol=C3=A1s Ojeda B=C3=A4r, David Al=
lsopp and Xavier Leroy,<br>&nbsp;&nbsp; review by the same)<br><br>- #11479=
: Make Unix.symlink domain-safe on Windows<br>&nbsp; (Olivier Nicole, revie=
w by Xavier Leroy and David Allsopp)<br><br>### Tools:<br><br>* #11004: Lit=
mus tests for checking the implementation of the<br>&nbsp; memory model.<br=
>&nbsp; (Luc Maranget, review by Gabriel Scherer and Xavier Leroy)<br><br>-=
 #11024: Handle alerts in ocamldoc.<br>&nbsp; The alert `[@@alert deprecate=
d]` is handled specifically and it's no longer<br>&nbsp; needed to duplicat=
e the deprecated annotation (the alert for the compiler and<br>&nbsp; the t=
ag for the documentation). Every other alerts also appear in the<br>&nbsp; =
documentation.<br>&nbsp; (Jules Aguillon, review by Florian Angeletti)<br><=
br>- #11065: Port the bytecode debugger to 5.0, adding support for effect h=
andlers.<br>&nbsp; (Damien Doligez and @fabbing, review by @fabbing and Xav=
ier Leroy)<br><br>- #11079: Add the -nobanners option to dumpobj.<br>&nbsp;=
 (S=C3=A9bastien Hinderer, review by Gabriel Scherer and Vincent Laviron)<b=
r><br>- #11100: Fix ocamltest to make sure failed tests are not counted as<=
br>&nbsp; "unexpected error".<br>&nbsp; (Damien Doligez, review by S=C3=A9b=
astien Hinderer)<br><br>- #11245: Merge the common code of ocamlcp and ocam=
loptp into a single module.<br>&nbsp; (David Allsopp, review by S=C3=A9bast=
ien Hinderer)<br><br>- #11382: OCamlmktop use a new initialization module "=
OCamlmktop_init" to<br>&nbsp; preserve backward-compatibility with user-mod=
ule provided modules that install<br>&nbsp; toplevel printers.<br>&nbsp; (F=
lorian Angeletti, review by Gabriel Scherer and David Allsopp)<br><br>### M=
anual and documentation:<br><br>- #11058: runtime/HACKING.adoc tips on debu=
gging the runtime<br>&nbsp; (Gabriel Scherer, review by Enguerrand Decorne =
and Nicol=C3=A1s Ojeda B=C3=A4r)<br><br>- #11093: Add an effect handlers tu=
torial<br>&nbsp; (KC Sivaramakrishnan, review by Fran=C3=A7ois Pottier, Gab=
riel Scherer, Fran=C3=A7ois<br>&nbsp; Bobot and Wiktor Kuchta)<br><br>- #11=
192: Better documentation for condition variables.<br>&nbsp; (Fran=C3=A7ois=
 Pottier, review by Luc Maranget, Xavier Leroy, and Wiktor Kuchta)<br><br>-=
 #11093: Add tutorials on parallelism features and the relaxed memory model=
<br>&nbsp; (KC Sivaramakrishnan, review by Damien Doligez, Anil Madhavapedd=
y, Gabriel<br>&nbsp; Scherer, Thomas Leonard, Tom Ridge, Xavier Leroy, Luc =
Maranget, Fabrice<br>&nbsp; Buoro, Olivier Nicole, Guillaume Munch-Maccagno=
ni, Jacques-Henri Jourdan)<br><br>- #11640: Add Flambda commonly-used optio=
ns to the ocamlopt manpage<br>&nbsp; (Amandine Nangah, review by David Alls=
opp, Florian Angeletti,<br>&nbsp; S=C3=A9bastien Hinderer, and Vincent Lavi=
ron)<br><br>- #11676: Fix missing since annotation in the `Sys` and `Format=
` modules<br>&nbsp; (Github user Bukolab99, review by Florian Angeletti)<br=
><br>- #11813: Make new multicore chapters easier to discover, and emphasiz=
e impact<br>&nbsp; on C bindings.<br>&nbsp; (Edwin T=C3=B6r=C3=B6k, review =
by KC Sivaramakrishnan, and Florian Angeletti)<br><br>### Compiler user-int=
erface and warnings:<br><br>- #9140, #11131: New command-line flag -nocwd t=
o not include implicit<br>&nbsp; the current directory to the load path.<br=
>&nbsp; (Thomas Roglin, review by Gabriel Scherer and Nicol=C3=A1s Ojeda B=
=C3=A4r)<br><br>- #11089: Add 'since &lt;version&gt;' information to compil=
er warnings.<br>&nbsp; (Andr=C3=A9 Maroneze, review by Florian Angeletti an=
d Gabriel Scherer)<br><br>- #10909: Disable warning 59 (assignment to immut=
able blocks) unless flambda<br>&nbsp; invariant checks are enabled.<br>&nbs=
p; (Vincent Laviron, review by Gabriel Scherer)<br><br>- #10981, #11276: Im=
plement a -cmi-file option for ocamlc and ocamlopt.<br>&nbsp; (S=C3=A9basti=
en Hinderer, review by Damien Doligez, Daniel B=C3=BCnzli and<br>&nbsp; Flo=
rian Angeletti)<br><br>* #11049: Stop padding 1-digit compiler minor versio=
n numbers.<br>&nbsp; (So for instance OCaml 5.0 rather than 5.00)<br>&nbsp;=
 (S=C3=A9bastien Hinderer, review by David Allsopp, Florian Angeletti and<b=
r>&nbsp; Xavier Leroy)<br><br>- #11184, #11670: Stop calling ranlib on crea=
ted / installed libraries<br>&nbsp; (S=C3=A9bastien Hinderer and Xavier Ler=
oy, review by the same)<br><br>- #11253: Deprecate `ocaml script` and `ocam=
lnat` script where `script` has no<br>&nbsp; extension and is an implicit b=
asename.<br>&nbsp; (David Allsopp, review by Florian Angeletti and S=C3=A9b=
astien Hinderer)<br><br>### Internal/compiler-libs changes:<br><br>- #10878=
, #10909: restore flambda after the Multicore merge.<br>&nbsp; (Vincent Lav=
iron, review by Gabriel Scherer and Xavier Leroy)<br><br>- #10864, #10888: =
restore afl-fuzz mode for sequential programs.<br>&nbsp; (Jan Midtgaard, re=
view by Xavier Leroy and Gabriel Scherer)<br><br>- #11008, #11047: rework G=
C statistics in the Multicore runtime<br>&nbsp; (Gabriel Scherer, review by=
 Enguerrand Decorne)<br><br>- #11058: basic debugging documentation in runt=
ime/HACKING.adoc<br>&nbsp; (Gabriel Scherer, review by Enguerrand Decorne a=
nd Nicol=C3=A1s Ojeda B=C3=A4r)<br><br>- #11199: Stop installing topdirs.cm=
i twice. The toplevel now reads topdirs.cmi<br>&nbsp; from +compiler-libs, =
as the debugger does.<br>&nbsp; (David Allsopp, review by S=C3=A9bastien Hi=
nderer)<br><br>- #11007, #11399: META files for the stdlib, compiler-libs a=
nd other libraries<br>&nbsp; (unix, dynlink, str, runtime_events, threads, =
ocamldoc) are now installed<br>&nbsp; along with the compiler.<br>&nbsp; (D=
avid Allsopp, Florian Angeletti, Nicol=C3=A1s Ojeda B=C3=A4r and S=C3=A9bas=
tien Hinderer,<br>&nbsp;&nbsp; review by Daniel B=C3=BCnzli, Kate Deplaix, =
Anil Madhavapeddy and Gabriel Scherer)<br><br>### Build system:<br><br>* #1=
0893: Remove configuration options --disable-force-safe-string and<br>&nbsp=
; DEFAULT_STRING=3Dunsafe as well as --enable-force-safe-string and<br>&nbs=
p; DEFAULT_STRING=3Dsafe which are now the default unconditionally.<br>&nbs=
p; (Kate Deplaix, review by Gabriel Scherer and David Allsopp)<br><br>- #11=
092: Build native-code compilers on OpenBSD/aarch64.<br>&nbsp; (Christopher=
 Zimmermann, review by Anil Madhavapeddy)<br><br>- #11126: Build system: ma=
ke it possible to choose which ocamldep<br>&nbsp; (and flags) to use when c=
omputing dependencies for the compiler.<br>&nbsp; Add a -no-slash option to=
 ocamldep to let users override -slash.<br>&nbsp; (S=C3=A9bastien Hinderer,=
 review by David Allsopp)<br><br>- #11147: Factorize the stdlib-related com=
pilation flags. Make it<br>&nbsp; possible to control them consistently thr=
ough the STDLIBFLAGS<br>&nbsp; build variable. Make sure ocamldoc and ocaml=
lex get compiled and<br>&nbsp; linked with debugging information (-g).<br>&=
nbsp; (S=C3=A9bastien Hinderer, review by Gabriel Scherer)<br><br>- #11149:=
 Make the bootstrap process reproducible on systems with non-big-endian<br>=
&nbsp; floating point. If the boot/ artefacts are up-to-date, this means th=
at running<br>&nbsp; make bootstrap on any platform should not change the i=
mages in boot/ and paves<br>&nbsp; the way for automated testing that the b=
ootstrap is repeatable.<br>&nbsp; (David Allsopp, review by Damien Doligez =
and S=C3=A9bastien Hinderer)<br><br>- #11160: otherlibs: merge win32unix in=
to unix.<br>&nbsp; (S=C3=A9bastien Hinderer, review by David Allsopp, Nicol=
=C3=A1s Ojeda B=C3=A4r,<br>&nbsp; Xavier Leroy, Vincent Laviron and Antonin=
 D=C3=A9cimo)<br><br>* #11198, #11298: Install the Dynlink, Str and Unix li=
braries to individual<br>&nbsp; subdirectories of LIBDIR. The compiler, deb=
ugger and toplevel automatically<br>&nbsp; add `-I +lib` if required, but d=
isplay an alert.<br>&nbsp; (David Allsopp, review by Florian Angeletti, Nic=
ol=C3=A1s Ojeda B=C3=A4r,<br>&nbsp;&nbsp; Valentin Gatien-Baron and S=C3=A9=
bastien Hinderer)<br><br>- #11200: Install ocamlprof's Profiling runtime mo=
dule to a +profiling,<br>&nbsp; removing it from the default namespace.<br>=
&nbsp; (David Allsopp, review by S=C3=A9bastien Hinderer)<br><br>- #11294: =
Switch minimum required autoconf to 2.71.<br>&nbsp; (David Allsopp, review =
by Xavier Leroy)<br><br>- #11370, #11373: Don't pass CFLAGS to flexlink dur=
ing configure.<br>&nbsp; (David Allsopp, report by William Hu, review by Xa=
vier Leroy and<br>&nbsp;&nbsp; S=C3=A9bastien Hinderer)<br><br>- #11487: Th=
wart FMA test optimization during configure<br>&nbsp; (William Hu, review b=
y David Allsopp and S=C3=A9bastien Hinderer)<br><br>- #11097: Build native-=
code compilers on NetBSD/aarch64<br>&nbsp; (Kate Deplaix, review by Anil Ma=
dhavapeddy)<br><br>### Bug fixes:<br><br>- #10768, #11340: Fix typechecking=
 regression when combining first class<br>&nbsp; modules and GADTs.<br>&nbs=
p; (Jacques Garrigue, report by Fran=C3=A7ois Thir=C3=A9, review by Matthew=
 Ryan)<br><br>- #10790: don't drop variance and injectivity annotations whe=
n pretty printing<br>&nbsp; `with` constraints (for example, `with type +!'=
a t =3D ...`).<br>&nbsp; (Florian Angeletti, report by Luke Maurer, review =
by Matthew Ryan and<br>&nbsp;&nbsp; Gabriel Scherer)<br><br>- #11167: Fix m=
emory leak from signal stack.<br>&nbsp; (Antoni =C5=BBewier=C5=BCejew, revi=
ew by Gabriel Scherer and Enguerrand Decorne)<br><br>- #11112: harden -use-=
runtime against spaces or quotes in the provided path<br>&nbsp; (Gabriel Sc=
herer, report by Brahima Dibassi, review by David Allsopp)<br><br>- #11068,=
 #11070: Fix typo in function name given in Unix_error exception for<br>&nb=
sp; Unix.readlink on Windows.<br>&nbsp; (David Allsopp, report by Xia Li-ya=
o)<br><br>- #10807: Don't duplicate standard handles in the child process<b=
r>&nbsp; spawned by win32unix Unix.create_process if the handles were alrea=
dy<br>&nbsp; inheritable. Fix broken signalling of EOF on standard handles =
if<br>&nbsp; they were already inheritable.<br>&nbsp; (Antonin D=C3=A9cimo,=
 review by Xavier Leroy and Nicol=C3=A1s Ojeda B=C3=A4r)<br><br>- #10868: F=
ix off-by-1 bug when initializing frame hashtables<br>&nbsp; (Jonah Beckfor=
d, review by Tom Kelly, Nicol=C3=A1s Ojeda B=C3=A4r and<br>&nbsp; KC Sivara=
makrishnan)<br><br>- #11077: Make dumpobj compatible with absence of naked =
pointer support<br>&nbsp; (Olivier Nicole and Jan Midtgaard, review by Gabr=
iel Scherer)<br><br>- #11111: fix fork() usage in ocamltest C code.<br>&nbs=
p; When calling fork() from C code with the Multicore runtime active,<br>&n=
bsp; one needs to call caml_atfork_hook() on the forked child before it<br>=
&nbsp; can use the OCaml runtime.<br>&nbsp; (Gabriel Scherer, review by Xav=
ier Leroy, report by Brahima Dibassi)<br><br>- #10809: Use the WSA_FLAG_NO_=
HANDLE_INHERIT on Windows when creating<br>&nbsp; sockets with WSASocket if=
 the cloexec (non-inheritable) parameter is<br>&nbsp; true. Fixes a race co=
ndition where a child process could inherit the<br>&nbsp; socket and deadlo=
ck the parent.<br>&nbsp; (Antonin D=C3=A9cimo, review by Xavier Leroy)<br><=
br>- #11194, #11609: Fix inconsistent type variable names in "unbound type =
var"<br>&nbsp; messages<br>&nbsp; (Ulysse G=C3=A9rard and Florian Angeletti=
, review Florian Angeletti and<br>&nbsp;&nbsp; Gabriel Scherer)<br><br>- #1=
1204: Fix regression introduced in 4.14.0 that would trigger Warning 17 whe=
n<br>&nbsp; calling virtual methods introduced by constraining the self typ=
e from within<br>&nbsp; the class definition.<br>&nbsp; (Nicol=C3=A1s Ojeda=
 B=C3=A4r, review by Leo White)<br><br>- #11263, #11267: caml/misc.h: check=
 whether `_MSC_VER` is defined before using<br>&nbsp; it to ensure that the=
 headers can always be used in code which turns on<br>&nbsp; -Wundef (or eq=
uivalent).<br>&nbsp; (David Allsopp and Nicol=C3=A1s Ojeda B=C3=A4r, review=
 by Nicol=C3=A1s Ojeda B=C3=A4r and<br>&nbsp;&nbsp; S=C3=A9bastien Hinderer=
)<br><br>- #11289, #11405: fix some leaks on systhread termination<br>&nbsp=
; (Fabrice Buoro, Enguerrand Decorne, Gabriel Scherer,<br>&nbsp;&nbsp; revi=
ew by Xavier Leroy and Florian Angeletti, report by Romain Beauxis)<br><br>=
- #11314, #11416: fix non-informative error message for module inclusion<br=
>&nbsp; (Florian Angeletti, report by Thierry Martinez, review by Gabriel S=
cherer)<br><br>- #11358, #11379: Refactor the initialization of bytecode th=
reading,<br>&nbsp; This avoids a "dangling pointer" warning of GCC 12.1.<br=
>&nbsp; (Xavier Leroy, report by Arma=C3=ABl Gu=C3=A9neau, review by Gabrie=
l Scherer)<br><br>- #11387, module type with constraints no longer crash th=
e compiler in presence<br>&nbsp; of both shadowing warnings and the `-bin-a=
nnot` compiler flag.<br>&nbsp; (Florian Angeletti, report by Christophe Raf=
falli, review by Gabriel Scherer)<br><br>- #11392, #11392: assertion failur=
e with -rectypes and external definitions<br>&nbsp; (Gabriel Scherer, revie=
w by Florian Angeletti, report by Dmitrii Kosarev)<br><br>- #11417: Fix reg=
ression allowing virtual methods in non-virtual classes.<br>&nbsp; (Leo Whi=
te, review by Florian Angeletti)<br><br>- #11468: Fix regression from #1018=
6 (OCaml 4.13) detecting IPv6 on Windows for<br>&nbsp; mingw-w64 i686 port.=
<br>&nbsp; (David Allsopp, review by Xavier Leroy and S=C3=A9bastien Hinder=
er)<br><br>- #11482, #11542: Fix random crash in large closure allocation<b=
r>&nbsp; (Damien Doligez, report by Thierry Martinez and Vincent Laviron, r=
eview by<br>&nbsp;&nbsp; Xavier Leroy)<br><br>- #11508, #11509: make Bytes.=
escaped domain-safe<br>&nbsp; (Christiano Haesbaert and Gabriel Scherer,<br=
>&nbsp;&nbsp; review by Xavier Leroy,<br>&nbsp;&nbsp; report by Jan Midtgaa=
rd and Tom Kelly)<br><br>- #11516, #11524: Fix the `deprecated_mutable` att=
ribute.<br>&nbsp; (Chris Casinghino, review by Nicol=C3=A1s Ojeda B=C3=A4r =
and Florian Angeletti)<br><br>- #11576: Fix bug in Bigarray.Genarray.init i=
n the the case of zero-dimensional<br>&nbsp; arrays.<br>&nbsp; (Nicol=C3=A1=
s Ojeda B=C3=A4r, Jeremy Yallop, report by Masayuki Takeda, review by Jerem=
y<br>&nbsp; Yallop and Florian Angeletti)<br><br>- #11587: Prevent integer =
comparison from being used on pointers<br>&nbsp; (Vincent Laviron, review b=
y Gabriel Scherer)<br><br>- #11622: Prevent stack overflow when printing a =
constructor or record<br>&nbsp; mismatch error involving recursive types.<b=
r>&nbsp; (Florian Angeletti, review by Gabriel Scherer)<br><br>- #11662, #1=
1673: fix a memory leak when using Dynlink,<br>&nbsp; the bug was only pres=
ent in development version of OCaml 5.<br>&nbsp; (Stephen Dolan, report by =
Andre Maroneze, review by Gabriel Scherer)<br><br>- #11732: Ensure that typ=
es from packed modules are always generalised<br>&nbsp; (Stephen Dolan and =
Leo White, review by Jacques Garrigue)<br><br>- #11737: Fix segfault condit=
ion in Unix.stat under Windows in the presence of<br>&nbsp; multiple thread=
s.<br>&nbsp; (Marc Lasson, Nicol=C3=A1s Ojeda B=C3=A4r, review by Gabriel S=
cherer and David Allsopp)<br><br>- #11776: Extend environment with functor =
parameters in `strengthen_lazy`.<br>&nbsp; (Chris Casinghino and Luke Maure=
r, review by Gabriel Scherer)<br><br>- #11533, #11534: follow synonyms agai=
n in #show_module_type<br>&nbsp; (this had stopped working in 4.14.0)<br>&n=
bsp; (Gabriel Scherer, review by Jacques Garrigue, report by Yaron Minsky)<=
br></div></div></div></body></html>
--=_7222fbed-f645-435c-a7e6-2d84487f8df4--