OCaml 5.3.0 released

Florian Angeletti <[email protected]> Wed, 8 Jan 2025 23:22:41 +0100 (CET)
Newsgroups gmane.comp.lang.caml.announce,gmane.comp.lang.caml.inria
Message-ID <[email protected]>
--=_63434ef9-2b2b-4e9e-8402-8882eeed3419
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

Dear Ocaml users,=20

We have the pleasure of announcing the release of OCaml version 5.3.0. dedi=
cated=20
to the memory of John William Mauchly and Paul Verlaine on the anniversary =
of=20
their death,=20

De la musique avant toute chose,=20
Et pour cela pr=C3=A9f=C3=A8re l=E2=80=99Impair=20
(Music first and foremost of all!=20
Choose your measure of odd not even)=20

Some of the highlights in OCaml 5.3.0 are:=20

- Syntax for deep effect handlers=20

There is now a dedicated syntax for installing deep effect handler=20

match f () with=20
| x -> x=20
| effect Random_float, k -> Effect.Deep.continue k (Random.float 1.0)=20

This new syntax adds a new `effect` keyword, which may break existing code.=
=20
To improve backward compatibility, this new keyword can be disabled with=20
the new `-keywords` flags if needed for backward compatibility.=20

- Restored MSVC port=20

It is now possible to use the MSVC toolchain on Windows, restoring the last=
=20
missing port from OCaml 4 (except for the native compiler support for 32-bi=
t=20
architectures which is not planned)=20

- Re-introduced statistical memory profiling (statmemprof)=20

The submodule `Gc.memprof` is restored with a slightly different API. This=
=20
submodule can be used to monitor memory allocation statistics inside a=20
program. In OCaml 5, each domain can be monitored independently while child=
=20
domains inherit the parent domain profiling profile (if there is one active=
).=20

- utf-8 encoded Unicode source files and modest support of Unicode identifi=
ers=20

type saison =3D Hiver | =C3=89t=C3=A9 | Printemps | Automne=20

The OCaml lexer has been extended to support a modest subset of Unicode=20
characters in identifiers. This is mostly intended for pedagogical use. Thi=
s=20
extended support requires source files to be utf-8 encoded Unicode text.=20

- More space-efficient implementation of Dynarray=20

The internal implementation of `Dynarray` now uses an unboxed representatio=
n=20
which avoids the need of storing items wrapped in a `Some x` block and thus=
=20
saves some space and indirections.=20

- Improved metadata on the pairs of declarations and definitions for merlin=
.=20

The metadata stored inside cmt files has been improved to better distinguis=
h=20
the provenance of identifiers (previous versions could confuse an interface=
 and=20
implementation identifier). Similarly, the metadata now tracks more precise=
ly=20
the association between declarations and definitions. For instance, in=20

module X =3D struct let x =3D 0 end=20
module M: sig=20
val x: int=20
end =3D struct=20
let x =3D 1=20
include X=20
end=20

Merlin can now determine that the definition of the `M.x` value lies inside=
 the module `X`.=20

And a lot of incremental changes:=20

- Around 20 new functions in the standard library (in the `Domain`, `Dynarr=
ay`=20
`Format`, `List`, `Queue`, `Sys`, and `Uchar` modules).=20
- Many fixes and improvements in the runtime=20
- Improved error messages for first-class modules, functors, labelled argum=
ents,=20
and type clashes.=20
- Numerous bug fixes=20

Please report any unexpected behaviours on the OCaml issue tracker(https://=
github.com/ocaml/ocaml/issues)=20
and post any questions or comments you might have on our discussion forums(=
https://discuss.ocaml.org).=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.3.0=20

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

* GitHub: https://github.com/ocaml/ocaml/releases/download/5.3.0/ocaml-5.3.=
0.tar.gz=20
* OCaml archives at Inria: https://caml.inria.fr/pub/distrib/ocaml-5.3/ocam=
l-5.3.0.tar.gz=20

Fine-Tuned Compiler Configuration=20
---------------------------------=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.3.0+options <option_list>=
=20

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

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


Changelog=20
--------------=20

(Changes that can break existing programs are marked with a "*")=20

Restored backend:=20
-------------------------=20

- #12954(https://github.com/ocaml/ocaml/issues/12954): Restore the MSVC por=
t=20
(David Allsopp, Antonin D=C3=A9cimo, Samuel Hym, and Miod Vallat, review by=
 Nicol=C3=A1s=20
Ojeda B=C3=A4r)=20

- #13093(https://github.com/ocaml/ocaml/issues/13093): Allow building the M=
SVC port with clang-cl.=20
(Antonin D=C3=A9cimo, review by Nicol=C3=A1s Ojeda B=C3=A4r, Samuel Hym,=20
David Allsopp and S=C3=A9bastien Hinderer)=20

Language features:=20
--------------------------=20

- #12309(https://github.com/ocaml/ocaml/issues/12309), #13158(https://githu=
b.com/ocaml/ocaml/issues/13158): Add syntax support for deep effect handler=
s=20
(Leo White, Tom Kelly, Anil Madhavapeddy, KC Sivaramakrishnan, Xavier Leroy=
=20
and Florian Angeletti, review by the same, Hugo Heuzard, and Ulysse G=C3=A9=
rard)=20

- #11736(https://github.com/ocaml/ocaml/issues/11736), #12664(https://githu=
b.com/ocaml/ocaml/issues/12664), #13628(https://github.com/ocaml/ocaml/issu=
es/13628): Support utf-8 encoded source files and latin-9=20
compatible identifiers.=20
(Xavier Leroy and Florian Angeletti, review by Daniel B=C3=BCnzli and=20
Jules Aguillon)=20


- #12828(https://github.com/ocaml/ocaml/issues/12828), #13283(https://githu=
b.com/ocaml/ocaml/issues/13283): Add short syntax for dependent functor typ=
es `(X:A) -> ...`=20
(Jeremy Yallop, review by Nicol=C3=A1s Ojeda B=C3=A4r and Gabriel Scherer)=
=20

Type system:=20
-----------------=20

- #11891(https://github.com/ocaml/ocaml/issues/11891), #12507(https://githu=
b.com/ocaml/ocaml/issues/12507): Allow to name new locally abstract types i=
n constructor type=20
annotations.=20
(Jacques Garrigue, report and review by Gabriel Scherer and Florian Angelet=
ti)=20

Runtime system:=20
----------------------=20

- #11911(https://github.com/ocaml/ocaml/issues/11911), #12923(https://githu=
b.com/ocaml/ocaml/issues/12923): Multicore statistical memory profiling.=20
This restores a notable OCaml 4 feature that was missing=20
in OCaml 5.=20
(Nick Barnes, review by Stephen Dolan, Jacques-Henri Jourdan=20
and Guillaume Munch-Maccagnoni).=20


- #13419(https://github.com/ocaml/ocaml/issues/13419): Fix memory bugs in r=
untime events system.=20
(B. Szilvasy and Nick Barnes, review by Miod Vallat, Nick Barnes,=20
Tim McGilchrist, and Gabriel Scherer)=20

- #13364(https://github.com/ocaml/ocaml/issues/13364): Emit major slice cou=
nters in the runtime events.=20
(KC Sivaramakrishnan and Sadiq Jaffer, review by Gabriel Scherer)=20

- #13382(https://github.com/ocaml/ocaml/issues/13382): Add more documentati=
on for Runtime_events types=20
(Sadiq Jaffer, review by Tim McGilchrist, Miod Vallat and KC Sivaramakrishn=
an)=20

- #13370(https://github.com/ocaml/ocaml/issues/13370): Fix a low-probabilit=
y crash when calling Gc.counters.=20
(Demi Marie Obenour, review by Gabriel Scherer)=20

- #13272(https://github.com/ocaml/ocaml/issues/13272): Allow maximum number=
 of domains to be specified as a OCAMLRUNPARAM=20
parameter.=20
(KC Sivaramakrishnan, review by Guillaume Munch-Maccagnoni, Miod Vallat,=20
Gabriel Scherer, David Allsopp, request by Zachary Yedidia).=20

- #12579(https://github.com/ocaml/ocaml/issues/12579): OS-based Synchronisa=
tion for Stop-the-World Sections=20
(B. Szilvasy, review by Miod Vallat, Nick Barnes, Olivier Nicole,=20
Gabriel Scherer and Damien Doligez)=20

- #12789(https://github.com/ocaml/ocaml/issues/12789): Restore caml_unregis=
ter_frametable from OCaml 4=20
(Fr=C3=A9d=C3=A9ric Recoules, review by Gabriel Scherer)=20

- #13003(https://github.com/ocaml/ocaml/issues/13003): new, more consistent=
 names for array-creation C functions=20
(Gabriel Scherer, review by Olivier Nicole)=20

- #13013(https://github.com/ocaml/ocaml/issues/13013): introduce a `caml_re=
sult` type to supersede the=20
use of 'encoded exception values' in the FFI.=20
(Gabriel Scherer, review by Damien Doligez,=20
Guillaume Munch-Maccagnoni and Xavier Leroy,=20
suggested by Guillaume Munch-Maccagnoni)=20

- #12407(https://github.com/ocaml/ocaml/issues/12407), #13226(https://githu=
b.com/ocaml/ocaml/issues/13226): Resource-handling improvements: add=20
exception-returning variants for all exception-raising functions in=20
`caml/fail.h`, for the purpose of cleaning-up state and resources=20
before raising.=20
(Guillaume Munch-Maccagnoni, review by Damien Doligez, Xavier Leroy=20
and Gabriel Scherer)=20

- #13086(https://github.com/ocaml/ocaml/issues/13086): Avoid spurious major=
 GC slices.=20
(Damien Doligez, report by Stephen Dolan, review by Gabriel Scherer=20
and Stephen Dolan)=20

- #11779(https://github.com/ocaml/ocaml/issues/11779), #13117(https://githu=
b.com/ocaml/ocaml/issues/13117): Improve logic for fiber stack alignment.=
=20
(Miod Vallat, report by Damien Doligez, review by Gabriel Scherer)=20

- #12839(https://github.com/ocaml/ocaml/issues/12839): Remove ATOMIC_UINTNA=
T_INIT from camlatomic.h (as part of a larger=20
cleanup of camlatomic.h)=20
(David Allsopp, review by Antonin D=C3=A9cimo, S=C3=A9bastien Hinderer, Sam=
uel Hym,=20
Guillaume Munch-Maccagnoni and Miod Vallat)=20

- #13163(https://github.com/ocaml/ocaml/issues/13163): Enable frame pointer=
s on macOS x86_64=20
(Tim McGilchrist, review by S=C3=A9bastien Hinderer and Fabrice Buoro)=20

- #12951(https://github.com/ocaml/ocaml/issues/12951): Constify constructor=
s and flags tables in C code (take 2).=20
Now these tables will go in the readonly segment, where they belong.=20
(Antonin D=C3=A9cimo, review by David Allsopp)=20

- #10696(https://github.com/ocaml/ocaml/issues/10696): Introduce __has_attr=
ibute and __has_c_attributes in=20
<caml/misc.h> to test the support of specific atributes in C=20
code. Introduce fallthrough as a wrapper around the fallthrough=20
attribute.=20
(Antonin D=C3=A9cimo, review by Nicol=C3=A1s Ojeda B=C3=A4r, Xavier Leroy, =
and=20
Gabriel Scherer)=20

- #13083(https://github.com/ocaml/ocaml/issues/13083): Use macros from limi=
ts.h to avoid signed-integer wrap-around.=20
Introduce CAML_{U,}INTNAT_{MIN,MAX} macros to expose {u,}intnat limits.=20
(Antonin D=C3=A9cimo, review by Nick Barnes, Xavier Leroy, Gabriel Scherer,=
=20
and Miod Vallat)=20

- #13239(https://github.com/ocaml/ocaml/issues/13239): Check whether the co=
mpiler supports the labels as values=20
extension to enable threaded code interpretation.=20
(Antonin D=C3=A9cimo, review by Miod Vallat)=20

- #13238(https://github.com/ocaml/ocaml/issues/13238): Enable software pref=
etching on x86 and x86_64 when building=20
with MSVC or clang-cl.=20
(Antonin D=C3=A9cimo, review by Miod Vallat)=20

- #13241(https://github.com/ocaml/ocaml/issues/13241), #13261(https://githu=
b.com/ocaml/ocaml/issues/13261), #13271(https://github.com/ocaml/ocaml/issu=
es/13271): Add CFI_SIGNAL_FRAME to ARM64 and RiscV runtimes,=20
for the purpose of displaying backtraces correctly in GDB.=20
(Tim McGilchrist, review by Miod Vallat, Gabriel Scherer and=20
KC Sivaramakrishnan)=20

- #13139(https://github.com/ocaml/ocaml/issues/13139): Simplify CAMLalign t=
o always use C23/C++11 alignas or C11=20
_Alignas. Ensures that stat data is always aligned to the best=20
boundary.=20
(Antonin D=C3=A9cimo, review by Miod Vallat and Xavier Leroy)=20

- #13280(https://github.com/ocaml/ocaml/issues/13280): Check for support of=
 compiler attributes. Allows using=20
compiler attributes with clang-cl.=20
(Antonin D=C3=A9cimo, review by Miod Vallat)=20

- #13243(https://github.com/ocaml/ocaml/issues/13243): Enable C compiler wa=
rnings internally when building with=20
clang-cl or MSVC. Provide fixes too.=20
(Antonin D=C3=A9cimo, review by Miod Vallat and Xavier Leroy)=20

- #13242(https://github.com/ocaml/ocaml/issues/13242): Define and use unrea=
chable and trap annotation, and clean-up some=20
runtime assertions.=20
(Antonin D=C3=A9cimo, review by Miod Vallat, Gabriel Scherer, and David All=
sopp)=20

- #13402(https://github.com/ocaml/ocaml/issues/13402), #13512(https://githu=
b.com/ocaml/ocaml/issues/13512), #13549(https://github.com/ocaml/ocaml/issu=
es/13549), #13553(https://github.com/ocaml/ocaml/issues/13553): Revise byte=
code implementation of callbacks=20
so that it no longer produces dangling registered bytecode fragments.=20
(Xavier Leroy, report by Jan Midtgaard, analysis by Stephen Dolan,=20
review by Miod Vallat)=20

- #13407(https://github.com/ocaml/ocaml/issues/13407): Add Runtime_events.E=
V_EMPTY_MINOR=20
(Thomas Leonard)=20

- #13522(https://github.com/ocaml/ocaml/issues/13522): Confirm runtime even=
ts ring is still active after callback.=20
(KC Sivaramakrishnan, review by Sadiq Jaffer and Miod Vallat)=20

- #13529(https://github.com/ocaml/ocaml/issues/13529): Do not write to even=
t ring after going out of stw participant set.=20
(KC Sivaramakrishnan, review by Sadiq Jaffer)=20

### Code generation and optimizations:=20

- #13014(https://github.com/ocaml/ocaml/issues/13014): Enable compile-time =
option -function-sections on all previously=20
unsupported native backends (POWER, riscv64 and s390x)=20
(Miod Vallat, review by Nicol=C3=A1s Ojeda B=C3=A4r)=20

- #7241(https://github.com/ocaml/ocaml/issues/7241), #12555(https://github.=
com/ocaml/ocaml/issues/12555), #13076(https://github.com/ocaml/ocaml/issues=
/13076), #13138(https://github.com/ocaml/ocaml/issues/13138), #13338(https:=
//github.com/ocaml/ocaml/issues/13338), #13152(https://github.com/ocaml/oca=
ml/issues/13152), #13153(https://github.com/ocaml/ocaml/issues/13153), #131=
54(https://github.com/ocaml/ocaml/issues/13154):=20
fix a soundness bug in the pattern-matching compiler=20
when side-effects mutate the scrutinee during matching.=20
(Gabriel Scherer, review by Nick Roberts)=20

- #13341(https://github.com/ocaml/ocaml/issues/13341): a warning when the p=
attern-matching compiler pessimizes code=20
because side-effects may mutate the scrutinee during=20
matching. (This warning is disabled by default, as this rarely=20
happens and its performance impact is typically not noticeable.)=20
(Gabriel Scherer, review by Nick Roberts, Florian Angeletti=20
and David Allsopp)=20

- #13179(https://github.com/ocaml/ocaml/issues/13179): Fix evaluation of to=
plevel lets in classes containing=20
local opens=20
(Vincent Laviron, review by Hugo Heuzard, Nathana=C3=ABlle Courant=20
and Gabriel Scherer)=20

- #13543(https://github.com/ocaml/ocaml/issues/13543): Remove some String-B=
ytes conversion from the stdlib to behave better=20
with js_of_ocaml=20
(Hugo Heuzard, review by Gabriel Scherer)=20

Standard library:=20
----------------------=20

- #12885(https://github.com/ocaml/ocaml/issues/12885): move Dynarray to an =
unboxed representation=20
(Gabriel Scherer, suggestions by Vincent Laviron,=20
review by Olivier Nicole and Simon Cruanes, Yann Leray, Alain Frisch)=20


- #12884(https://github.com/ocaml/ocaml/issues/12884): Add `Queue.drop`=20
(L=C3=A9o Andr=C3=A8s, review by Nicol=C3=A1s Ojeda B=C3=A4r and Gabriel Sc=
herer)=20

- #13168(https://github.com/ocaml/ocaml/issues/13168): In Array.shuffle, cl=
arify the code that validates the=20
result of the user-supplied function `rand`, and improve the=20
error message that is produced when this result is invalid.=20
(Fran=C3=A7ois Pottier, review by Florian Angeletti, Daniel B=C3=BCnzli=20
and Gabriel Scherer)=20

- #12133(https://github.com/ocaml/ocaml/issues/12133): Expose support for p=
rinting substrings in Format=20
(Florian Angeletti, review by Daniel B=C3=BCnzli, Gabriel Scherer=20
and Nicol=C3=A1s Ojeda B=C3=A4r)=20

- #12869(https://github.com/ocaml/ocaml/issues/12869): Add List.take, List.=
drop, List.take_while and List.drop_while=20
(Kate Deplaix and Oscar Butler-Aldridge, review by Nicol=C3=A1s Ojeda B=C3=
=A4r,=20
Craig Ferguson and Gabriel Scherer)=20

- #13047(https://github.com/ocaml/ocaml/issues/13047): Add Sys.poll_actions=
 to (only) run pending runtime actions.=20
(Nick Barnes, review by Gabriel Scherer, Guillaume Munch-Maccagnoni, and=20
Vincent Laviron)=20

- #13144(https://github.com/ocaml/ocaml/issues/13144): Dynarray.{equal, com=
pare}=20
(Gabriel Scherer,=20
review by Jeremy Yallop, Daniel B=C3=BCnzli and Olivier Nicole,=20
request by Olivier Nicole)=20

- #13171(https://github.com/ocaml/ocaml/issues/13171): expose `Domain.self_=
index : unit -> int` (a somewhat-dense=20
indexing of currently-running domains) for advanced use-cases of=20
domain-indexed concurrent data structures.=20
(Gabriel Scherer,=20
review by KC Sivaramakrishnan, Miod Vallat and Nicol=C3=A1s Ojeda B=C3=A4r,=
=20
report by Vesa Karvonen)=20

- #13197(https://github.com/ocaml/ocaml/issues/13197): Dynarray.blit, which=
 allows to extend the destination=20
dynarray (0 <=3D dst_pos <=3D dst_length).=20
(Gabriel Scherer, report by Hazem Elmasry,=20
review by Olivier Nicole, Hazem Elmasry and Nicol=C3=A1s Ojeda B=C3=A4r)=20

* (*breaking change*) #13240(https://github.com/ocaml/ocaml/issues/13240): =
Add Uchar.seeded_hash, Change Uchar.hash implementation.=20
Previously, Uchar.hash was aliased to Uchar.to_int. If you need that behavi=
or,=20
change your module instantiation from eg `module HT =3D Hashtbl.Make(Uchar)=
` to=20
```=20
module HT =3D Hashtbl.Make(struct=20
...=20
let hash =3D Uchar.to_int=20
end)=20
```=20
If the current implementation is desired, and you have a hashtable module `=
HT`=20
(produced with the `Make` functor) in persistent storage, use `HT.rebuild` =
to=20
ensure it doesn't break when reading from or writing to buckets.=20
(Hazem ElMasry, review by Gabriel Scherer and Nicol=C3=A1s Ojeda B=C3=A4r)=
=20

- #13318(https://github.com/ocaml/ocaml/issues/13318): Fix regression in GC=
 alarms, and fix them for flambda.=20
(Guillaume Munch-Maccagnoni, report by Benjamin Monate, review by=20
Vincent Laviron and Gabriel Scherer)=20

- #13296(https://github.com/ocaml/ocaml/issues/13296): Add mem, memq, find_=
opt, find_index, find_map and find_mapi=20
to Dynarray.=20
(Jake H, review by Gabriel Scherer and Florian Angeletti)=20

Other libraries:=20
--------------------=20

- #11996(https://github.com/ocaml/ocaml/issues/11996): release the dependen=
cy of dynlink on compilerlibs.=20
(S=C3=A9bastien Hinderer and Stephen Dolan, review by Damien Doligez and=20
Hugo Heuzard)=20

- #13326(https://github.com/ocaml/ocaml/issues/13326): Implement Unix.O_APP=
END on windows.=20
(Romain Beauxis, review by Miod Vallat, Gabriel Scherer and Antonin D=C3=A9=
cimo)=20

Tools:=20
--------=20

- #11716(https://github.com/ocaml/ocaml/issues/11716): ocamllex: mismatched=
 parentheses and curly brackets are now caught=20
by ocamllex, instead of causing invalid OCaml code to be generated.=20
(Demi Marie Obenour, review by Damien Doligez and Xavier Leroy)=20

- #12904(https://github.com/ocaml/ocaml/issues/12904): Run the testsuite wi=
th ThreadSanitizer on a PR when label=20
`run-thread-sanitizer` is added=20
(Olivier Nicole, suggested by S=C3=A9bastien Hinderer and David Allsopp, re=
view by=20
Gabriel Scherer)=20

* (*breaking change*) #13114(https://github.com/ocaml/ocaml/issues/13114): =
Support ocamldebug remote debugging over IPv6 on all=20
platforms, and over Unix domain sockets on Windows.=20
(Antonin D=C3=A9cimo, review by Gabriel Scherer and Miod Vallat)=20

- #13136(https://github.com/ocaml/ocaml/issues/13136): Rewrite GDB extensio=
ns and macros in debugger-agnostic Python, and add=20
LLDB support for them.=20
(Nick Barnes, review by Tim McGilchrist and Gabriel Scherer)=20

Toplevel:=20
---------=20

- #12891(https://github.com/ocaml/ocaml/issues/12891): Improved styling for=
 initial prompt=20
(Florian Angeletti, review by Gabriel Scherer)=20

- #13053(https://github.com/ocaml/ocaml/issues/13053): Improved display of =
builtin types such as `_ list` when aliased.=20
(Samuel Vivien, review by Florian Angeletti)=20

Manual and documentation:=20
-------------------------------------=20

- #13370(https://github.com/ocaml/ocaml/issues/13370): Document that that t=
emporary variables holding GCd pointers must=20
not be live across a GC.=20
(Demi Marie Obenour)=20

- #12298(https://github.com/ocaml/ocaml/issues/12298): Manual: emphasize th=
at Bigarray.int refers to an OCaml integer,=20
which does not match the C int type.=20
(Edwin T=C3=B6r=C3=B6k, review by Florian Angeletti)=20

- #12868(https://github.com/ocaml/ocaml/issues/12868): Manual: simplify sty=
le colours of the post-processed manual and API=20
HTML pages, and fix the search button icon=20
(Yawar Amin, review by Simon Grondin, Gabriel Scherer, and Florian Angelett=
i)=20

- #12949(https://github.com/ocaml/ocaml/issues/12949): document OCaml relea=
se cycles and version strings in=20
`release-info/introduction.md`.=20
(Florian Angeletti, review by Fabrice Buoro, Kate Deplaix, Damien Doligez, =
and=20
Gabriel Scherer)=20

- #12976(https://github.com/ocaml/ocaml/issues/12976): Manual: use webman/<=
version>/*.html and=20
webman/<version>/api/ for OCaml.org HTML manual generation=20
(Shakthi Kannan, review by Hannes Mehnert, and Florian Angeletti)=20

- #13045(https://github.com/ocaml/ocaml/issues/13045): Emphasize caution ab=
out behaviour of custom block finalizers.=20
(Nick Barnes)=20

- #13216(https://github.com/ocaml/ocaml/issues/13216): document the new `ca=
ml_result` type in the FFI chapter of the manual.=20
(Gabriel Scherer, review by Miod Vallat, Daniel B=C3=BCnzli, Nick Barnes,=
=20
Guillaume Munch-Maccagnoni and Antonin D=C3=A9cimo)=20

- #13287(https://github.com/ocaml/ocaml/issues/13287): stdlib/sys.mli: Upda=
te documentation on Sys.opaque_identity=20
following #9412(https://github.com/ocaml/ocaml/issues/9412).=20
(Matt Walker, review by Guillaume Munch-Maccagnoni and Vincent Laviron)=20

- #13295(https://github.com/ocaml/ocaml/issues/13295): Use syntax for deep =
effect handlers in the effect handlers manual=20
page.=20
(KC Sivaramakrishnan, review by Anil Madhavapeddy, Florian Angeletti and Mi=
od=20
Vallat)=20

- #13424(https://github.com/ocaml/ocaml/issues/13424): Fix `Gc.quick_stat` =
documentation to clarify that returned fields=20
`live_words`, `live_blocks`, `free_words`, and `fragments` are not zero.=20
(Jan Midtgaard, review by Damien Doligez and KC Sivaramakrishnan)=20

- #13440(https://github.com/ocaml/ocaml/issues/13440): Update documentation=
 of `Gc.{control,get,set}` to reflect fields=20
not currently supported on OCaml 5.=20
(Jan Midtgaard, review by Gabriel Scherer)=20

- #13469(https://github.com/ocaml/ocaml/issues/13469), #13474(https://githu=
b.com/ocaml/ocaml/issues/13474), #13535(https://github.com/ocaml/ocaml/issu=
es/13535): Document that [Hashtbl.create n] creates a hash table=20
with a default minimal size, even if [n] is very small or negative.=20
(Antonin D=C3=A9cimo, Nick Bares, report by Nikolaus Huber and Jan Midtgaar=
d,=20
review by Florian Angeletti, Anil Madhavapeddy, Gabriel Scherer,=20
and Miod Vallat)=20

- #13666(https://github.com/ocaml/ocaml/issues/13666): Rewrite parts of the=
 example code around nested lists in Chapter 6=20
(Polymorphism and its limitations -> Polymorphic recursion) giving the=20
"depth" function [in the non-polymorphically-recursive part of the example]=
=20
a much more sensible behavior; also fix a typo and some formatting.=20
(Frank Steffahn, review by Florian Angeletti)=20

- #13668(https://github.com/ocaml/ocaml/issues/13668): Document the basic s=
upport for unicode identifiers and the switch to=20
UTF-8 encoded Unicode text for OCaml source file=20
(Florian Angeletti, review by Nicol=C3=A1s Ojeda B=C3=A4r and Daniel B=C3=
=BCnzli)=20

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

* (*breaking change*) #12084(https://github.com/ocaml/ocaml/issues/12084), =
#13669(https://github.com/ocaml/ocaml/issues/13669), #13673(https://github.=
com/ocaml/ocaml/issues/13673): Check link order when creating archive and w=
hen using=20
ocamlopt.=20
(Hugo Heuzard, review by Stefan Muenzel and S=C3=A9bastien Hinderer)=20

- #12980(https://github.com/ocaml/ocaml/issues/12980): Explain type mismatc=
h involving first-class modules by including=20
the module level error message=20
(Florian Angeletti, review by Vincent Laviron)=20

- #12985(https://github.com/ocaml/ocaml/issues/12985), #12988(https://githu=
b.com/ocaml/ocaml/issues/12988): Better error messages for partially applie=
d functors.=20
(Florian Angeletti, report by Arthur Wendling, review by Gabriel Scherer)=
=20

- #13034(https://github.com/ocaml/ocaml/issues/13034), #13260(https://githu=
b.com/ocaml/ocaml/issues/13260): Better error messages for mismatched funct=
ion labels=20
(Florian Angeletti, report by Daniel B=C3=BCnzli, review by Gabriel Scherer=
 and=20
Samuel Vivien)=20

- #13051(https://github.com/ocaml/ocaml/issues/13051): Add a "Syntax error"=
 to error messages for invalid package signatures.=20
(Samuel Vivien, review by Gabriel Scherer)=20

- #13099(https://github.com/ocaml/ocaml/issues/13099): Fix erroneous loadin=
g of cmis for some module type errors.=20
(Nick Roberts, review by Florian Angeletti)=20

- #13151(https://github.com/ocaml/ocaml/issues/13151), name conflicts expla=
nation as a footnote=20
(Florian Angeletti, review by Gabriel Scherer)=20

- #13228(https://github.com/ocaml/ocaml/issues/13228): Re-export Cmt2annot.=
{iterator,binary_part} which had become hidden=20
since #11288(https://github.com/ocaml/ocaml/issues/11288) and broke ocamlbr=
owser.=20
(David Allsopp, report by Jacques Garrigue, review by S=C3=A9bastien Hinder=
er)=20

- #13251(https://github.com/ocaml/ocaml/issues/13251): Register printer for=
 errors in Emitaux=20
(Vincent Laviron, review by Miod Vallat and Florian Angeletti)=20

- #13255(https://github.com/ocaml/ocaml/issues/13255): Re-enable warning 34=
 for unused locally abstract types=20
(Nick Roberts, review by Chris Casinghino and Florian Angeletti)=20

- #12182(https://github.com/ocaml/ocaml/issues/12182): Improve the type cla=
sh error message.=20
For example, this message:=20
This expression has type ...=20
is changed into:=20
The constant "42" has type ...=20
(Jules Aguillon, review by Gabriel Scherer and Florian Angeletti)=20

- #13471(https://github.com/ocaml/ocaml/issues/13471): add `-keywords <vers=
ion?+list>` flag to define the list of keywords=20
recognized by the lexer, for instance `-keywords 5.2` disable the `effect`=
=20
keyword.=20
(Florian Angeletti, review by Gabriel Scherer)=20

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

- #13286(https://github.com/ocaml/ocaml/issues/13286): Distinguish unique i=
dentifiers `Shape.Uid.t` according to their=20
provenance: either an implementation or an interface.=20
(Ulysse G=C3=A9rard, review by Florian Angeletti and Leo White)=20

- #13308(https://github.com/ocaml/ocaml/issues/13308): keep track of relati=
ons between declaration in the cmt files. This is=20
useful information for external tools for navigation and analysis purposis.=
=20
(Ulysse G=C3=A9rard, Florian Angeletti, review by Florian Angeletti and Gab=
riel=20
Scherer)=20


- #11129(https://github.com/ocaml/ocaml/issues/11129), #11148(https://githu=
b.com/ocaml/ocaml/issues/11148): enforce that ppxs do not produce `parsetre=
e`s with=20
an empty list of universally quantified type variables=20
(`. int -> int` instead of `'a . int -> int'`)=20
(Florian Angeletti, report by Simmo Saan, review by Gabriel Scherer)=20

- #12534(https://github.com/ocaml/ocaml/issues/12534): document and refacto=
r Matching.mk_failaction_pos=20
(Gabriel Scherer, review by Vincent Laviron and Nick Roberts)=20

- #13076(https://github.com/ocaml/ocaml/issues/13076): change the handling =
of Match_failure exits in the pattern-matching=20
compiler, to prepare for a complete fix for #7241(https://github.com/ocaml/=
ocaml/issues/7241)=20
(Gabriel Scherer, review by Thomas Refis and Nick Roberts)=20

- #12896(https://github.com/ocaml/ocaml/issues/12896): Simplify the compila=
tion of custom bytecode runtimes by explicitly=20
compiling the primitives file before calling the linker. Tidy-up both the=
=20
generating code and the output itself for C code being generated by the=20
bytecode linker in `-custom` and `-output-*` modes.=20
(David Allsopp, Antonin D=C3=A9cimo and Samuel Hym, review by Vincent Lavir=
on)=20

- #12932(https://github.com/ocaml/ocaml/issues/12932): Remove useless code =
in Typecore.type_label_exp (was a fix for #4862(https://github.com/ocaml/oc=
aml/issues/4862))=20
(Jacques Garrigue, review by Gabriel Scherer)=20

- #12943(https://github.com/ocaml/ocaml/issues/12943): Make transient_expr.=
scope a bitfield, and use it to store marks.=20
Marks are automatically allocated, and removed when leaving their scope.=20
Falls back to using TransientTypeSet when marks are exhausted.=20
(Jacques Garrigue and Takafumi Saikawa, review by Basile Cl=C3=A9ment)=20

- #12946(https://github.com/ocaml/ocaml/issues/12946): Make generalization =
automatic when leaving scope.=20
As a result, the `Ctype.generalize*` and `Ctype.correct_levels` functions=
=20
were removed. The latter is now called `Ctype.duplicate_type`.=20
(Jacques Garrigue and Takafumi Saikawa, review by Richard Eisenberg)=20

- #12968(https://github.com/ocaml/ocaml/issues/12968): Attach location to c=
onstants in the parsetree=20
(Jules Aguillon, review by Gabriel Scherer)=20

- #12959(https://github.com/ocaml/ocaml/issues/12959), #13055(https://githu=
b.com/ocaml/ocaml/issues/13055): Avoid an internal error on recursive modul=
e type inconsistency=20
(Florian Angeletti, review by Jacques Garrigue and Gabriel Scherer)=20

- #13049(https://github.com/ocaml/ocaml/issues/13049): graphical debugging =
printer for types=20
(Florian Angeletti, review by Gabriel Scherer)=20

- #13074(https://github.com/ocaml/ocaml/issues/13074), #13082(https://githu=
b.com/ocaml/ocaml/issues/13082), #13084(https://github.com/ocaml/ocaml/issu=
es/13084): refactoring in the pattern-matching compiler=20
(Gabriel Scherer, review by Thomas Refis, Vincent Laviron and Nick Roberts)=
=20

- #13067(https://github.com/ocaml/ocaml/issues/13067): rework volatile memo=
ry access rules under TSan to consider properly=20
aligned smaller-than-register read operations as atomic, which gets rid of=
=20
false positives on s390x=20
(Miod Vallat, review by Fabien Buoro)=20

- #13162(https://github.com/ocaml/ocaml/issues/13162): Use quoted strings t=
o clarify code being generated.=20
(Antonin D=C3=A9cimo, review by Miod Vallat and Gabriel Scherer)=20

- #13015(https://github.com/ocaml/ocaml/issues/13015): Emit floating-point =
literals in .rodata section on ELF arm64=20
platforms (Linux, *BSD).=20
(Miod Vallat, review by Nicol=C3=A1s Ojeda B=C3=A4r)=20

- #13169(https://github.com/ocaml/ocaml/issues/13169), #13311(https://githu=
b.com/ocaml/ocaml/issues/13311): Introduce a document data type for compile=
r messages=20
rather than relying on `Format.formatter -> unit` closures.=20
(Florian Angeletti, review by Gabriel Scherer)=20

- #13193(https://github.com/ocaml/ocaml/issues/13193): Remove the unused en=
v_init field from class blocks=20
(Vincent Laviron, review by Jacques Garrigue)=20

- #13257(https://github.com/ocaml/ocaml/issues/13257): integrate MetaOCaml =
in the Menhir grammar to ease MetaOCaml=20
maintenance. This is a purely internal change: there is no support=20
in the lexer, so no change to the surface OCaml grammar.=20
(Oleg Kiselyov, Gabriel Scherer and Florian Angeletti,=20
review by Jeremy Yallop)=20

- #13289(https://github.com/ocaml/ocaml/issues/13289): Use C99 for loop to =
reduce the scope of the for loop iterator.=20
(Antonin D=C3=A9cimo, review by Miod Vallat and Gabriel Scherer)=20

- #13336(https://github.com/ocaml/ocaml/issues/13336): compiler-libs, split=
 the `Printtyp` in three to only keep=20
"user-friendly" functions in the `Printtyp` module.=20
(Florian Angeletti, review by Gabriel Scherer)=20

- #13361(https://github.com/ocaml/ocaml/issues/13361): split runtime/array.=
c functions to consistently expose=20
uniform_array and floatarray versions, use floatarray versions=20
in Float.Array.=20
(Gabriel Scherer, review by Nicol=C3=A1s Ojeda B=C3=A4r)=20

- #13507(https://github.com/ocaml/ocaml/issues/13507): A small refactoring =
to [free_vars] to make it a bit faster=20
by not allocating a list when the list is not necessary.=20
(Richard Eisenberg, review by Jacques Garrigue)=20

Build system:=20
------------------=20

- #12909(https://github.com/ocaml/ocaml/issues/12909): Reorganise how MKEXE=
_VIA_CC is built to make it correct for MSVC by=20
grouping all the linker flags at the end of the C compiler commandline=20
(David Allsopp and Samuel Hym, review by Nicol=C3=A1s Ojeda B=C3=A4r)=20

- #12992(https://github.com/ocaml/ocaml/issues/12992), #13009(https://githu=
b.com/ocaml/ocaml/issues/13009): Check that flexlink can be executed only w=
hen building in a=20
native windows environment.=20
(Romain Beauxis, review by David Allsopp and S=C3=A9bastien Hinderer)=20

- #12996(https://github.com/ocaml/ocaml/issues/12996): Only link with -lgcc=
_eh when available.=20
(Romain Beauxis, review by David Allsopp and Miod Vallat)=20

* (*breaking change*) #13200(https://github.com/ocaml/ocaml/issues/13200): =
Do not use CFLAGS for linking.=20
(S=C3=A9bastien Hinderer, review by Gabriel Scherer, Antonin D=C3=A9cimo,=
=20
Miod Vallat and Samuel Hym)=20

- #13201(https://github.com/ocaml/ocaml/issues/13201), #13244(https://githu=
b.com/ocaml/ocaml/issues/13244): Fix and speedup builds with TSan.=20
(S=C3=A9bastien Hinderer, review by Miod Vallat, Gabriel Scherer and=20
Olivier Nicole)=20

* (*breaking change*) #12578(https://github.com/ocaml/ocaml/issues/12578), =
#12589(https://github.com/ocaml/ocaml/issues/12589), #13322(https://github.=
com/ocaml/ocaml/issues/13322), #13519(https://github.com/ocaml/ocaml/issues=
/13519): Use configured CFLAGS and CPPFLAGS *only*=20
during the build of the compiler itself. Do not use them when=20
compiling third-party C sources through the compiler. Flags for=20
compiling third-party C sources can still be specified at configure=20
time in the COMPILER_{BYTECODE,NATIVE}_{CFLAGS,CPPFLAGS}=20
configuration variables.=20
(S=C3=A9bastien Hinderer, report by William Hu, review by David Allsopp)=20

- #13285(https://github.com/ocaml/ocaml/issues/13285): continue the merge o=
f the sub-makefiles into the root=20
Makefile started with #11243(https://github.com/ocaml/ocaml/issues/11243), =
#11248(https://github.com/ocaml/ocaml/issues/11248), #11268(https://github.=
com/ocaml/ocaml/issues/11268), #11420(https://github.com/ocaml/ocaml/issues=
/11420), #11675(https://github.com/ocaml/ocaml/issues/11675),=20
#12198(https://github.com/ocaml/ocaml/issues/12198), #12321(https://github.=
com/ocaml/ocaml/issues/12321), #12586(https://github.com/ocaml/ocaml/issues=
/12586), #12616(https://github.com/ocaml/ocaml/issues/12616), #12706(https:=
//github.com/ocaml/ocaml/issues/12706) and #13048(https://github.com/ocaml/=
ocaml/issues/13048).=20
(S=C3=A9bastien Hinderer, review by David Allsopp and Florian Angeletti)=20

Bug fixes:=20
-------------=20

- #12854(https://github.com/ocaml/ocaml/issues/12854): Add a test in the re=
gression suite that flags the bug #12825(https://github.com/ocaml/ocaml/iss=
ues/12825).=20
(Luc Maranget)=20

- #12888(https://github.com/ocaml/ocaml/issues/12888): fix printing of unca=
ught exceptions in `.cmo` files passed on the=20
command-line of the toplevel.=20
(Nicol=C3=A1s Ojeda B=C3=A4r, review by Florian Angeletti, report by Daniel=
 B=C3=BCnzli)=20

- #12910(https://github.com/ocaml/ocaml/issues/12910), #12920(https://githu=
b.com/ocaml/ocaml/issues/12920): Fix an unsound interaction between first-c=
lass modules=20
and polymorphic records by saving and restoring univar_pairs.=20
(Stephen Dolan, review by Gabriel Scherer, report by Jeremy Yallop)=20

- #12994(https://github.com/ocaml/ocaml/issues/12994): Remove un-used and u=
nsafe caml_drop_continuation=20
(Tim McGilchrist, reviewed by Gabriel Scherer and Miod Vallat)=20

- #12963(https://github.com/ocaml/ocaml/issues/12963): Restore caml_runtime=
_parameters implementation. This primitive allows=20
programs to query the runtime parameters supplied to an OCaml program.=20
Implementation missing since OCaml 5.0.=20
(Tim McGilchrist, reviewed by David Allsopp and Miod Vallat)=20

- #13012(https://github.com/ocaml/ocaml/issues/13012): parsing: Fix dropped=
 attributes after a '-' or '+'=20
The syntax '-(1 [@foo])' was incorrectly parsed as '-1'.=20
(Jules Aguillon, reviewed by Gabriel Scherer, report by Gabriel Scherer)=20

* (*breaking change*) #13070(https://github.com/ocaml/ocaml/issues/13070): =
On Windows, when configured with bootstrapped flexdll, don't add=20
+flexdll to the search path when -nostdlib is specified (which then means=
=20
-L <path-to-flexdll> no longer gets passed to the system linker).=20
(David Allsopp, review by Florian Angeletti)=20

- #13089(https://github.com/ocaml/ocaml/issues/13089): Fix bug in `runtime_=
events` library which could result in garbled=20
output under Windows.=20
(B. Szilvasy, review by Nicol=C3=A1s Ojeda B=C3=A4r and Miod Vallat)=20

- #13088(https://github.com/ocaml/ocaml/issues/13088): A few type-checker b=
ehaviors look at a type to see if there are=20
any labeled arguments in it. This sometimes required expansion, which=20
could, in obscure scenarios, result in superfluous type errors.=20
(Richard Eisenberg, review by Gabriel Scherer and Jacques Garrigue)=20

- #13103(https://github.com/ocaml/ocaml/issues/13103): FreeBSD/amd64: prope=
rly annotate .o files with non-executable stack=20
notes (Konstantin Belousov, review by Nicol=C3=A1s Ojeda B=C3=A4r)=20

- #13150(https://github.com/ocaml/ocaml/issues/13150): improve a transitive=
-closure computation algorithm in the flambda=20
middle-end to avoid a compilation time blowup on Menhir-generated code=20
(Florian Weimer, review by Gabriel Scherer and Pierre Chambart,=20
report by Richard Jones)=20

- #13166(https://github.com/ocaml/ocaml/issues/13166): Fix a MinGW/MSVC Sys=
.rename regression on renaming a parent directory=20
to an empty child directory.=20
(Jan Midtgaard, review by Antonin D=C3=A9cimo, S=C3=A9bastien Hinderer, and=
=20
David Allsopp)=20

- #13185(https://github.com/ocaml/ocaml/issues/13185), #13192(https://githu=
b.com/ocaml/ocaml/issues/13192): Reject type-level module aliases on functo=
r parameter=20
inside signatures.=20
(Jacques Garrigue, report by Richard Eisenberg, review by Florian Angeletti=
)=20

- #13170(https://github.com/ocaml/ocaml/issues/13170): Fix a bug that would=
 result in some floating alerts `[@@@alert ...]`=20
incorrectly triggering Warning 53.=20
(Nicol=C3=A1s Ojeda B=C3=A4r, review by Chris Casinghino and Florian Angele=
tti)=20

- #13203(https://github.com/ocaml/ocaml/issues/13203): Do not issue warning=
 53 if the compiler is stopping before attributes=20
have been accurately marked.=20
(Chris Casinghino, review by Florian Angeletti)=20

- #13207(https://github.com/ocaml/ocaml/issues/13207): Be sure to reload th=
e register caching the exception handler in=20
caml_c_call and caml_c_call_stack_args, as its value may have been changed=
=20
if the OCaml stack is expanded during a callback.=20
(Miod Vallat, report by Vesa Karvonen, review by Gabriel Scherer and=20
Xavier Leroy)=20

- #13209(https://github.com/ocaml/ocaml/issues/13209): Fix configure test t=
hat checks whether `ar` supports `@FILE`=20
arguments.=20
(Nicol=C3=A1s Ojeda B=C3=A4r, report by Boris D.)=20

- #13221(https://github.com/ocaml/ocaml/issues/13221): Compute more accurat=
e instruction sizes for branch relocation on=20
POWER.=20
(Miod Vallat, review by Gabriel Scherer)=20

- #13252(https://github.com/ocaml/ocaml/issues/13252): Rework register assi=
gnment in the interpreter code on m68k on Linux,=20
due to the %a5 register being used by Glibc.=20
(Miod Vallat, report by St=C3=A9phane Glondu, review by Gabriel Scherer and=
=20
Xavier Leroy)=20

- #13247(https://github.com/ocaml/ocaml/issues/13247): Disable lib_unix/kil=
l test for MacOS AMD64 with TSan, linking=20
to llvm bug report causing infinite signal loops.=20
(Tim McGilchrist, review by Olivier Nicole, Miod Vallat, S=C3=A9bastien Hin=
derer=20
and Gabriel Scherer)=20

- #13234(https://github.com/ocaml/ocaml/issues/13234), #13267(https://githu=
b.com/ocaml/ocaml/issues/13267): Open runtime events file in read-write mod=
e on armel=20
(armv5) systems due to atomic operations limitations on that=20
platform.=20
(St=C3=A9phane Glondu, review by Miod Vallat and Vincent Laviron)=20

- #13273(https://github.com/ocaml/ocaml/issues/13273): Fix a call to test i=
n configure.ac that was causing errors when=20
LDFLAGS contains several words.=20
(St=C3=A9phane Glondu, review by Miod Vallat)=20

- #13290(https://github.com/ocaml/ocaml/issues/13290): Fix uninitialized an=
d out of bounds reads in runtime_events_consumer.c=20
(Edwin T=C3=B6r=C3=B6k, review by Miod Vallat and Antonin D=C3=A9cimo)=20

- #13306(https://github.com/ocaml/ocaml/issues/13306): An algorithm in the =
type-checker that checks two types for equality=20
could sometimes, in theory, return the wrong answer. This patch fixes the=
=20
oversight. No known program triggers the bug.=20
(Richard Eisenberg, review by Florian Angeletti)=20

- #13400(https://github.com/ocaml/ocaml/issues/13400): Initialize th->signa=
l_stack to avoid free of uninitialized data=20
if the user calls caml_c_thread_unregister on the main thread.=20
(Richard W.M. Jones, review by Guillaume Munch-Maccagnoni and=20
Gabriel Scherer)=20

- #13140(https://github.com/ocaml/ocaml/issues/13140): POWER back-end: fix =
issue with call to `caml_call_realloc_stack`=20
from a DLL=20
(Xavier Leroy, review by Miod Vallat)=20

- #13263(https://github.com/ocaml/ocaml/issues/13263), #13560(https://githu=
b.com/ocaml/ocaml/issues/13560): fix printing true and false in toplevel an=
d error=20
messages (no more unexpected \#true)=20
(Florian Angeletti, report by Samuel Vivien, review by Gabriel Scherer)=20

- #13388(https://github.com/ocaml/ocaml/issues/13388), #13540(https://githu=
b.com/ocaml/ocaml/issues/13540): raises an error message (and not an intern=
al compiler error)=20
when two local substitutions are incompatible (for instance `module type=20
S:=3Dsig end type t:=3D(module S)`)=20
(Florian Angeletti, report by Nailen Matschke, review by Gabriel Scherer, a=
nd=20
Leo White)=20

- #13408(https://github.com/ocaml/ocaml/issues/13408): Fix misplaced debug =
runtime assertion triggerable by a race=20
between domain exit and backup thread=20
(Miod Vallat and Gabriel Scherer, report by Jan Midtgaard)=20

- #13417(https://github.com/ocaml/ocaml/issues/13417): `Filename.quote_comm=
and`: fix handling of forward slashes in program=20
path under Win32.=20
(Nicol=C3=A1s Ojeda B=C3=A4r, review by David Allsopp and Damien Doligez)=
=20

- #13501(https://github.com/ocaml/ocaml/issues/13501): Regression on mutual=
ly recursive types caused by #12180(https://github.com/ocaml/ocaml/issues/1=
2180).=20
Resuscitate Typedecl.update_type.=20
(Jacques Garrigue and Takafumi Saikawa, review by Florian Angeletti, Richar=
d=20
Eisenberg and Gabriel Scherer)=20

- #13502(https://github.com/ocaml/ocaml/issues/13502): Fix misindexing rela=
ted to `Gc.finalise_last` that could prevent=20
finalisers from being run.=20
(Nick Roberts, review by Mark Shinwell)=20

- #13495(https://github.com/ocaml/ocaml/issues/13495), #13514(https://githu=
b.com/ocaml/ocaml/issues/13514): Fix typechecker crash while typing objects=
=20
(Jacques Garrigue, report by Nicol=C3=A1s Ojeda B=C3=A4r, review by=20
Nicolas Ojeda B=C3=A4r, Gabriel Scherer, Stephen Dolan, Florian Angeletti)=
=20

- #13391(https://github.com/ocaml/ocaml/issues/13391), #13551(https://githu=
b.com/ocaml/ocaml/issues/13551): fix a printing bug with `-dsource` when us=
ing=20
raw literal inside a locally abstract type constraint=20
(i.e. `let f: type \#for. ... `)=20
(Florian Angeletti, report by Nick Roberts, review by Richard Eisenberg)=20

- #13520(https://github.com/ocaml/ocaml/issues/13520): Fix compilation of n=
ative-code version of systhreads. Bytecode fields=20
were being included in the thread descriptors.=20
(David Allsopp, review by S=C3=A9bastien Hinderer and Miod Vallat)=20

- #13541(https://github.com/ocaml/ocaml/issues/13541), #13591(https://githu=
b.com/ocaml/ocaml/issues/13591): Fix headers for C++ inclusion.=20
(Antonin D=C3=A9cimo, review by Nick Barnes, report by Kate Deplaix)=20

- #13579(https://github.com/ocaml/ocaml/issues/13579), #13583(https://githu=
b.com/ocaml/ocaml/issues/13583): Unsoundness involving non-injective types =
+ gadts=20
(Jacques Garrigue, report by @v-gb,=20
review by Richard Eisenberg and Florian Angeletti)=20

- #13598(https://github.com/ocaml/ocaml/issues/13598): Falsely triggered wa=
rning 56 [unreachable-case]=20
This was caused by unproper protection of the retyping function.=20
(Jacques Garrigue, report by T=C3=B5ivo Leedj=C3=A4rv, review by Florian An=
geletti)=20

- #13603(https://github.com/ocaml/ocaml/issues/13603), #13604(https://githu=
b.com/ocaml/ocaml/issues/13604): fix source printing in the presence of the=
 escaped raw=20
identifier `\#mod`.=20
(Florian Angeletti, report by Chris Casinghino, review by Gabriel Scherer)=
=20


--=_63434ef9-2b2b-4e9e-8402-8882eeed3419
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>Dear Ocaml users,<br><br>We have the pleasu=
re of announcing the release of OCaml version 5.3.0. dedicated<br>to the me=
mory of John William Mauchly and Paul Verlaine on the anniversary of<br>the=
ir death,<br><br>&nbsp; De la musique avant toute chose,<br>&nbsp; Et pour =
cela pr=C3=A9f=C3=A8re l=E2=80=99Impair<br>(Music first and foremost of all=
!<br>&nbsp;Choose your measure of odd not even)<br><br>Some of the highligh=
ts in OCaml 5.3.0 are:<br><br>- Syntax for deep effect handlers<br><br>&nbs=
p; There is now a dedicated syntax for installing deep effect handler<br><b=
r>&nbsp;&nbsp;&nbsp; match f () with<br>&nbsp;&nbsp;&nbsp; | x -&gt; x<br>&=
nbsp;&nbsp;&nbsp; | effect Random_float, k -&gt; Effect.Deep.continue k (Ra=
ndom.float 1.0)<br><br>&nbsp; This new syntax adds a new `effect` keyword, =
which may break existing code.<br>&nbsp; To improve backward compatibility,=
 this new keyword can be disabled with<br>&nbsp; the new `-keywords` flags =
if needed for backward compatibility.<br><br>- Restored MSVC port<br><br>&n=
bsp; It is now possible to use the MSVC toolchain on Windows, restoring the=
 last<br>&nbsp; missing port from OCaml 4 (except for the native compiler s=
upport for 32-bit<br>&nbsp; architectures which is not planned)<br><br>- Re=
-introduced statistical memory profiling (statmemprof)<br><br>&nbsp; The su=
bmodule `Gc.memprof` is restored with a slightly different API. This<br>&nb=
sp; submodule can be used to monitor memory allocation statistics inside a<=
br>&nbsp; program. In OCaml 5, each domain can be monitored independently w=
hile child<br>&nbsp; domains inherit the parent domain profiling profile (i=
f there is one active).<br><br>- utf-8 encoded Unicode source files and mod=
est support of Unicode identifiers<br><br>&nbsp;&nbsp;&nbsp; type saison =
=3D Hiver | =C3=89t=C3=A9 | Printemps | Automne<br><br>&nbsp; The OCaml lex=
er has been extended to support a modest subset of Unicode<br>&nbsp; charac=
ters in identifiers. This is mostly intended for pedagogical use. This<br>&=
nbsp; extended support requires source files to be utf-8 encoded Unicode te=
xt.<br><br>- More space-efficient implementation of Dynarray<br><br>&nbsp; =
The internal implementation of `Dynarray` now uses an unboxed representatio=
n<br>&nbsp; which avoids the need of storing items wrapped in a `Some x` bl=
ock and thus<br>&nbsp; saves some space and indirections.<br><br>- Improved=
 metadata on the pairs of declarations and definitions for merlin.<br><br>&=
nbsp; The metadata stored inside cmt files has been improved to better dist=
inguish<br>&nbsp; the provenance of identifiers (previous versions could co=
nfuse an interface and<br>&nbsp; implementation identifier). Similarly, the=
 metadata now tracks more precisely<br>&nbsp; the association between decla=
rations and definitions. For instance, in<br><br>&nbsp;&nbsp;&nbsp; module =
X =3D struct let x =3D 0 end<br>&nbsp;&nbsp;&nbsp; module M: sig<br>&nbsp;&=
nbsp;&nbsp;&nbsp;&nbsp; val x: int<br>&nbsp;&nbsp;&nbsp; end =3D struct<br>=
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; let x =3D 1<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp=
; include X<br>&nbsp;&nbsp;&nbsp; end<br><br>&nbsp; Merlin can now determin=
e that the definition of the `M.x` value lies inside the module `X`.<br><br=
>And a lot of incremental changes:<br><br>- Around 20 new functions in the =
standard library (in the `Domain`, `Dynarray`<br>`Format`, `List`, `Queue`,=
 `Sys`, and `Uchar` modules).<br>- Many fixes and improvements in the runti=
me<br>- Improved error messages for first-class modules, functors, labelled=
 arguments,<br>&nbsp; and type clashes.<br>- Numerous bug fixes<br><br>Plea=
se report any unexpected behaviours on the OCaml issue tracker(https://gith=
ub.com/ocaml/ocaml/issues)<br>and post any questions or comments you might =
have on our discussion forums(https://discuss.ocaml.org).<br><br><br>The fu=
ll list of changes can be found in the changelog below.<br><br>Happy hackin=
g,<br>Florian Angeletti for the OCaml team.<br><br><br>Installation Instruc=
tions<br>-------------------------<br><br>The base compiler can be installe=
d as an opam switch with the following commands:<br><br>&nbsp;&nbsp;&nbsp; =
opam update<br>&nbsp;&nbsp;&nbsp; opam switch create 5.3.0<br><br>The sourc=
e code for the release is also directly available on:<br><br>* GitHub: http=
s://github.com/ocaml/ocaml/releases/download/5.3.0/ocaml-5.3.0.tar.gz<br>* =
OCaml archives at Inria: https://caml.inria.fr/pub/distrib/ocaml-5.3/ocaml-=
5.3.0.tar.gz<br><br>Fine-Tuned Compiler Configuration<br>------------------=
---------------<br><br>If you want to tweak the configuration of the compil=
er, you can switch to the option variant with:<br><br>&nbsp;&nbsp;&nbsp; op=
am update<br>&nbsp;&nbsp;&nbsp; opam switch create &lt;switch_name&gt; ocam=
l-variants.5.3.0+options &lt;option_list&gt;<br><br>where `&lt;option_list&=
gt;` is a space separated list of `ocaml-option-*` packages. For instance, =
for a `flambda` and `no-flat-float-array` switch:<br><br>&nbsp;&nbsp;&nbsp;=
 opam switch create 5.3.0+flambda+nffa ocaml-variants.5.3.0+options ocaml-o=
ption-flambda ocaml-option-no-flat-float-array<br><br><br>Changelog<br>----=
----------<br><br>&nbsp; (Changes that can break existing programs are mark=
ed with a "*")<br><br>Restored backend:<br>-------------------------<br><br=
>- #12954(https://github.com/ocaml/ocaml/issues/12954): Restore the MSVC po=
rt<br>&nbsp; (David Allsopp, Antonin D=C3=A9cimo, Samuel Hym, and Miod Vall=
at, review by Nicol=C3=A1s<br>&nbsp;&nbsp; Ojeda B=C3=A4r)<br><br>- #13093(=
https://github.com/ocaml/ocaml/issues/13093): Allow building the MSVC port =
with clang-cl.<br>&nbsp; (Antonin D=C3=A9cimo, review by Nicol=C3=A1s Ojeda=
 B=C3=A4r, Samuel Hym,<br>&nbsp;&nbsp; David Allsopp and S=C3=A9bastien Hin=
derer)<br><br>Language features:<br>--------------------------<br><br>- #12=
309(https://github.com/ocaml/ocaml/issues/12309), #13158(https://github.com=
/ocaml/ocaml/issues/13158): Add syntax support for deep effect handlers<br>=
&nbsp; (Leo White, Tom Kelly, Anil Madhavapeddy, KC Sivaramakrishnan, Xavie=
r Leroy<br>&nbsp;&nbsp; and Florian Angeletti, review by the same, Hugo Heu=
zard, and Ulysse G=C3=A9rard)<br><br>- #11736(https://github.com/ocaml/ocam=
l/issues/11736), #12664(https://github.com/ocaml/ocaml/issues/12664), #1362=
8(https://github.com/ocaml/ocaml/issues/13628): Support utf-8 encoded sourc=
e files and latin-9<br>&nbsp; compatible identifiers.<br>&nbsp; (Xavier Ler=
oy and Florian Angeletti, review by Daniel B=C3=BCnzli and<br>&nbsp;&nbsp; =
Jules Aguillon)<br><br><br>- #12828(https://github.com/ocaml/ocaml/issues/1=
2828), #13283(https://github.com/ocaml/ocaml/issues/13283): Add short synta=
x for dependent functor types `(X:A) -&gt; ...`<br>&nbsp; (Jeremy Yallop, r=
eview by Nicol=C3=A1s Ojeda B=C3=A4r and Gabriel Scherer)<br><br>Type syste=
m:<br>-----------------<br><br>- #11891(https://github.com/ocaml/ocaml/issu=
es/11891), #12507(https://github.com/ocaml/ocaml/issues/12507): Allow to na=
me new locally abstract types in constructor type<br>&nbsp; annotations.<br=
>&nbsp; (Jacques Garrigue, report and review by Gabriel Scherer and Florian=
 Angeletti)<br><br>Runtime system:<br>----------------------<br><br>- #1191=
1(https://github.com/ocaml/ocaml/issues/11911), #12923(https://github.com/o=
caml/ocaml/issues/12923): Multicore statistical memory profiling.<br>&nbsp;=
 This restores a notable OCaml 4 feature that was missing<br>&nbsp; in OCam=
l 5.<br>&nbsp; (Nick Barnes, review by Stephen Dolan, Jacques-Henri Jourdan=
<br>&nbsp;&nbsp; and Guillaume Munch-Maccagnoni).<br><br><br>- #13419(https=
://github.com/ocaml/ocaml/issues/13419): Fix memory bugs in runtime events =
system.<br>&nbsp; (B. Szilvasy and Nick Barnes, review by Miod Vallat, Nick=
 Barnes,<br>&nbsp;&nbsp; Tim McGilchrist, and Gabriel Scherer)<br><br>- #13=
364(https://github.com/ocaml/ocaml/issues/13364): Emit major slice counters=
 in the runtime events.<br>&nbsp; (KC Sivaramakrishnan and Sadiq Jaffer, re=
view by Gabriel Scherer)<br><br>- #13382(https://github.com/ocaml/ocaml/iss=
ues/13382): Add more documentation for Runtime_events types<br>&nbsp; (Sadi=
q Jaffer, review by Tim McGilchrist, Miod Vallat and KC Sivaramakrishnan)<b=
r><br>- #13370(https://github.com/ocaml/ocaml/issues/13370): Fix a low-prob=
ability crash when calling Gc.counters.<br>&nbsp; (Demi Marie Obenour, revi=
ew by Gabriel Scherer)<br><br>- #13272(https://github.com/ocaml/ocaml/issue=
s/13272): Allow maximum number of domains to be specified as a OCAMLRUNPARA=
M<br>&nbsp; parameter.<br>&nbsp; (KC Sivaramakrishnan, review by Guillaume =
Munch-Maccagnoni, Miod Vallat,<br>&nbsp;&nbsp; Gabriel Scherer, David Allso=
pp, request by Zachary Yedidia).<br><br>- #12579(https://github.com/ocaml/o=
caml/issues/12579): OS-based Synchronisation for Stop-the-World Sections<br=
>&nbsp; (B. Szilvasy, review by Miod Vallat, Nick Barnes, Olivier Nicole,<b=
r>&nbsp;&nbsp; Gabriel Scherer and Damien Doligez)<br><br>- #12789(https://=
github.com/ocaml/ocaml/issues/12789): Restore caml_unregister_frametable fr=
om OCaml 4<br>&nbsp; (Fr=C3=A9d=C3=A9ric Recoules, review by Gabriel Schere=
r)<br><br>- #13003(https://github.com/ocaml/ocaml/issues/13003): new, more =
consistent names for array-creation C functions<br>&nbsp; (Gabriel Scherer,=
 review by Olivier Nicole)<br><br>- #13013(https://github.com/ocaml/ocaml/i=
ssues/13013): introduce a `caml_result` type to supersede the<br>&nbsp; use=
 of 'encoded exception values' in the FFI.<br>&nbsp; (Gabriel Scherer, revi=
ew by Damien Doligez,<br>&nbsp;&nbsp; Guillaume Munch-Maccagnoni and Xavier=
 Leroy,<br>&nbsp;&nbsp; suggested by Guillaume Munch-Maccagnoni)<br><br>- #=
12407(https://github.com/ocaml/ocaml/issues/12407), #13226(https://github.c=
om/ocaml/ocaml/issues/13226): Resource-handling improvements: add<br>&nbsp;=
 exception-returning variants for all exception-raising functions in<br>&nb=
sp; `caml/fail.h`, for the purpose of cleaning-up state and resources<br>&n=
bsp; before raising.<br>&nbsp; (Guillaume Munch-Maccagnoni, review by Damie=
n Doligez, Xavier Leroy<br>&nbsp;&nbsp; and Gabriel Scherer)<br><br>- #1308=
6(https://github.com/ocaml/ocaml/issues/13086): Avoid spurious major GC sli=
ces.<br>&nbsp; (Damien Doligez, report by Stephen Dolan, review by Gabriel =
Scherer<br>&nbsp;&nbsp; and Stephen Dolan)<br><br>- #11779(https://github.c=
om/ocaml/ocaml/issues/11779), #13117(https://github.com/ocaml/ocaml/issues/=
13117): Improve logic for fiber stack alignment.<br>&nbsp; (Miod Vallat, re=
port by Damien Doligez, review by Gabriel Scherer)<br><br>- #12839(https://=
github.com/ocaml/ocaml/issues/12839): Remove ATOMIC_UINTNAT_INIT from camla=
tomic.h (as part of a larger<br>&nbsp; cleanup of camlatomic.h)<br>&nbsp; (=
David Allsopp, review by Antonin D=C3=A9cimo, S=C3=A9bastien Hinderer, Samu=
el Hym,<br>&nbsp;&nbsp; Guillaume Munch-Maccagnoni and Miod Vallat)<br><br>=
- #13163(https://github.com/ocaml/ocaml/issues/13163): Enable frame pointer=
s on macOS x86_64<br>&nbsp; (Tim McGilchrist, review by S=C3=A9bastien Hind=
erer and Fabrice Buoro)<br><br>- #12951(https://github.com/ocaml/ocaml/issu=
es/12951): Constify constructors and flags tables in C code (take 2).<br>&n=
bsp; Now these tables will go in the readonly segment, where they belong.<b=
r>&nbsp; (Antonin D=C3=A9cimo, review by David Allsopp)<br><br>- #10696(htt=
ps://github.com/ocaml/ocaml/issues/10696): Introduce __has_attribute and __=
has_c_attributes in<br>&nbsp; &lt;caml/misc.h&gt; to test the support of sp=
ecific atributes in C<br>&nbsp; code. Introduce fallthrough as a wrapper ar=
ound the fallthrough<br>&nbsp; attribute.<br>&nbsp; (Antonin D=C3=A9cimo, r=
eview by Nicol=C3=A1s Ojeda B=C3=A4r, Xavier Leroy, and<br>&nbsp;&nbsp; Gab=
riel Scherer)<br><br>- #13083(https://github.com/ocaml/ocaml/issues/13083):=
 Use macros from limits.h to avoid signed-integer wrap-around.<br>&nbsp; In=
troduce CAML_{U,}INTNAT_{MIN,MAX} macros to expose {u,}intnat limits.<br>&n=
bsp; (Antonin D=C3=A9cimo, review by Nick Barnes, Xavier Leroy, Gabriel Sch=
erer,<br>&nbsp;&nbsp; and Miod Vallat)<br><br>- #13239(https://github.com/o=
caml/ocaml/issues/13239): Check whether the compiler supports the labels as=
 values<br>&nbsp; extension to enable threaded code interpretation.<br>&nbs=
p; (Antonin D=C3=A9cimo, review by Miod Vallat)<br><br>- #13238(https://git=
hub.com/ocaml/ocaml/issues/13238): Enable software prefetching on x86 and x=
86_64 when building<br>&nbsp; with MSVC or clang-cl.<br>&nbsp; (Antonin D=
=C3=A9cimo, review by Miod Vallat)<br><br>- #13241(https://github.com/ocaml=
/ocaml/issues/13241), #13261(https://github.com/ocaml/ocaml/issues/13261), =
#13271(https://github.com/ocaml/ocaml/issues/13271): Add CFI_SIGNAL_FRAME t=
o ARM64 and RiscV runtimes,<br>&nbsp; for the purpose of displaying backtra=
ces correctly in GDB.<br>&nbsp; (Tim McGilchrist, review by Miod Vallat, Ga=
briel Scherer and<br>&nbsp;&nbsp; KC Sivaramakrishnan)<br><br>- #13139(http=
s://github.com/ocaml/ocaml/issues/13139): Simplify CAMLalign to always use =
C23/C++11 alignas or C11<br>&nbsp; _Alignas. Ensures that stat data is alwa=
ys aligned to the best<br>&nbsp; boundary.<br>&nbsp; (Antonin D=C3=A9cimo, =
review by Miod Vallat and Xavier Leroy)<br><br>- #13280(https://github.com/=
ocaml/ocaml/issues/13280): Check for support of compiler attributes. Allows=
 using<br>&nbsp; compiler attributes with clang-cl.<br>&nbsp; (Antonin D=C3=
=A9cimo, review by Miod Vallat)<br><br>- #13243(https://github.com/ocaml/oc=
aml/issues/13243): Enable C compiler warnings internally when building with=
<br>&nbsp; clang-cl or MSVC. Provide fixes too.<br>&nbsp; (Antonin D=C3=A9c=
imo, review by Miod Vallat and Xavier Leroy)<br><br>- #13242(https://github=
.com/ocaml/ocaml/issues/13242): Define and use unreachable and trap annotat=
ion, and clean-up some<br>&nbsp; runtime assertions.<br>&nbsp; (Antonin D=
=C3=A9cimo, review by Miod Vallat, Gabriel Scherer, and David Allsopp)<br><=
br>- #13402(https://github.com/ocaml/ocaml/issues/13402), #13512(https://gi=
thub.com/ocaml/ocaml/issues/13512), #13549(https://github.com/ocaml/ocaml/i=
ssues/13549), #13553(https://github.com/ocaml/ocaml/issues/13553): Revise b=
ytecode implementation of callbacks<br>&nbsp; so that it no longer produces=
 dangling registered bytecode fragments.<br>&nbsp; (Xavier Leroy, report by=
 Jan Midtgaard, analysis by Stephen Dolan,<br>&nbsp;&nbsp; review by Miod V=
allat)<br><br>- #13407(https://github.com/ocaml/ocaml/issues/13407): Add Ru=
ntime_events.EV_EMPTY_MINOR<br>&nbsp; (Thomas Leonard)<br><br>- #13522(http=
s://github.com/ocaml/ocaml/issues/13522): Confirm runtime events ring is st=
ill active after callback.<br>&nbsp; (KC Sivaramakrishnan, review by Sadiq =
Jaffer and Miod Vallat)<br><br>- #13529(https://github.com/ocaml/ocaml/issu=
es/13529): Do not write to event ring after going out of stw participant se=
t.<br>&nbsp; (KC Sivaramakrishnan, review by Sadiq Jaffer)<br><br>### Code =
generation and optimizations:<br><br>- #13014(https://github.com/ocaml/ocam=
l/issues/13014): Enable compile-time option -function-sections on all previ=
ously<br>&nbsp; unsupported native backends (POWER, riscv64 and s390x)<br>&=
nbsp; (Miod Vallat, review by Nicol=C3=A1s Ojeda B=C3=A4r)<br><br>- #7241(h=
ttps://github.com/ocaml/ocaml/issues/7241), #12555(https://github.com/ocaml=
/ocaml/issues/12555), #13076(https://github.com/ocaml/ocaml/issues/13076), =
#13138(https://github.com/ocaml/ocaml/issues/13138), #13338(https://github.=
com/ocaml/ocaml/issues/13338), #13152(https://github.com/ocaml/ocaml/issues=
/13152), #13153(https://github.com/ocaml/ocaml/issues/13153), #13154(https:=
//github.com/ocaml/ocaml/issues/13154):<br>&nbsp; fix a soundness bug in th=
e pattern-matching compiler<br>&nbsp; when side-effects mutate the scrutine=
e during matching.<br>&nbsp; (Gabriel Scherer, review by Nick Roberts)<br><=
br>- #13341(https://github.com/ocaml/ocaml/issues/13341): a warning when th=
e pattern-matching compiler pessimizes code<br>&nbsp; because side-effects =
may mutate the scrutinee during<br>&nbsp; matching. (This warning is disabl=
ed by default, as this rarely<br>&nbsp; happens and its performance impact =
is typically not noticeable.)<br>&nbsp; (Gabriel Scherer, review by Nick Ro=
berts, Florian Angeletti<br>&nbsp;&nbsp; and David Allsopp)<br><br>- #13179=
(https://github.com/ocaml/ocaml/issues/13179): Fix evaluation of toplevel l=
ets in classes containing<br>&nbsp; local opens<br>&nbsp; (Vincent Laviron,=
 review by Hugo Heuzard, Nathana=C3=ABlle Courant<br>&nbsp;&nbsp; and Gabri=
el Scherer)<br><br>- #13543(https://github.com/ocaml/ocaml/issues/13543): R=
emove some String-Bytes conversion from the stdlib to behave better<br>&nbs=
p; with js_of_ocaml<br>&nbsp; (Hugo Heuzard, review by Gabriel Scherer)<br>=
<br>Standard library:<br>----------------------<br><br>- #12885(https://git=
hub.com/ocaml/ocaml/issues/12885): move Dynarray to an unboxed representati=
on<br>&nbsp; (Gabriel Scherer, suggestions by Vincent Laviron,<br>&nbsp;&nb=
sp; review by Olivier Nicole and Simon Cruanes, Yann Leray, Alain Frisch)<b=
r><br><br>- #12884(https://github.com/ocaml/ocaml/issues/12884): Add `Queue=
.drop`<br>&nbsp; (L=C3=A9o Andr=C3=A8s, review by Nicol=C3=A1s Ojeda B=C3=
=A4r and Gabriel Scherer)<br><br>- #13168(https://github.com/ocaml/ocaml/is=
sues/13168): In Array.shuffle, clarify the code that validates the<br>&nbsp=
; result of the user-supplied function `rand`, and improve the<br>&nbsp; er=
ror message that is produced when this result is invalid.<br>&nbsp; (Fran=
=C3=A7ois Pottier, review by Florian Angeletti, Daniel B=C3=BCnzli<br>&nbsp=
;&nbsp; and Gabriel Scherer)<br><br>- #12133(https://github.com/ocaml/ocaml=
/issues/12133): Expose support for printing substrings in Format<br>&nbsp; =
(Florian Angeletti, review by Daniel B=C3=BCnzli, Gabriel Scherer<br>&nbsp;=
&nbsp; and Nicol=C3=A1s Ojeda B=C3=A4r)<br><br>- #12869(https://github.com/=
ocaml/ocaml/issues/12869): Add List.take, List.drop, List.take_while and Li=
st.drop_while<br>&nbsp; (Kate Deplaix and Oscar Butler-Aldridge, review by =
Nicol=C3=A1s Ojeda B=C3=A4r,<br>&nbsp;&nbsp; Craig Ferguson and Gabriel Sch=
erer)<br><br>- #13047(https://github.com/ocaml/ocaml/issues/13047): Add Sys=
.poll_actions to (only) run pending runtime actions.<br>&nbsp; (Nick Barnes=
, review by Gabriel Scherer, Guillaume Munch-Maccagnoni, and<br>&nbsp; Vinc=
ent Laviron)<br><br>- #13144(https://github.com/ocaml/ocaml/issues/13144): =
Dynarray.{equal, compare}<br>&nbsp; (Gabriel Scherer,<br>&nbsp;&nbsp; revie=
w by Jeremy Yallop, Daniel B=C3=BCnzli and Olivier Nicole,<br>&nbsp;&nbsp; =
request by Olivier Nicole)<br><br>- #13171(https://github.com/ocaml/ocaml/i=
ssues/13171): expose `Domain.self_index : unit -&gt; int` (a somewhat-dense=
<br>&nbsp; indexing of currently-running domains) for advanced use-cases of=
<br>&nbsp; domain-indexed concurrent data structures.<br>&nbsp; (Gabriel Sc=
herer,<br>&nbsp;&nbsp; review by KC Sivaramakrishnan, Miod Vallat and Nicol=
=C3=A1s Ojeda B=C3=A4r,<br>&nbsp;&nbsp; report by Vesa Karvonen)<br><br>- #=
13197(https://github.com/ocaml/ocaml/issues/13197): Dynarray.blit, which al=
lows to extend the destination<br>&nbsp; dynarray (0 &lt;=3D dst_pos &lt;=
=3D dst_length).<br>&nbsp; (Gabriel Scherer, report by Hazem Elmasry,<br>&n=
bsp;&nbsp; review by Olivier Nicole, Hazem Elmasry and Nicol=C3=A1s Ojeda B=
=C3=A4r)<br><br>* (*breaking change*) #13240(https://github.com/ocaml/ocaml=
/issues/13240): Add Uchar.seeded_hash, Change Uchar.hash implementation.<br=
>&nbsp; Previously, Uchar.hash was aliased to Uchar.to_int. If you need tha=
t behavior,<br>&nbsp; change your module instantiation from eg `module HT =
=3D Hashtbl.Make(Uchar)` to<br>&nbsp; ```<br>&nbsp;&nbsp;&nbsp; module HT =
=3D Hashtbl.Make(struct<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ...<br>&nbsp;&nbs=
p;&nbsp;&nbsp;&nbsp; let hash =3D Uchar.to_int<br>&nbsp;&nbsp;&nbsp; end)<b=
r>&nbsp; ```<br>&nbsp; If the current implementation is desired, and you ha=
ve a hashtable module `HT`<br>&nbsp; (produced with the `Make` functor) in =
persistent storage, use `HT.rebuild` to<br>&nbsp; ensure it doesn't break w=
hen reading from or writing to buckets.<br>&nbsp; (Hazem ElMasry, review by=
 Gabriel Scherer and Nicol=C3=A1s Ojeda B=C3=A4r)<br><br>- #13318(https://g=
ithub.com/ocaml/ocaml/issues/13318): Fix regression in GC alarms, and fix t=
hem for flambda.<br>&nbsp; (Guillaume Munch-Maccagnoni, report by Benjamin =
Monate, review by<br>&nbsp;&nbsp; Vincent Laviron and Gabriel Scherer)<br><=
br>- #13296(https://github.com/ocaml/ocaml/issues/13296): Add mem, memq, fi=
nd_opt, find_index, find_map and find_mapi<br>&nbsp; to Dynarray.<br>&nbsp;=
 (Jake H, review by Gabriel Scherer and Florian Angeletti)<br><br>Other lib=
raries:<br>--------------------<br><br>- #11996(https://github.com/ocaml/oc=
aml/issues/11996): release the dependency of dynlink on compilerlibs.<br>&n=
bsp; (S=C3=A9bastien Hinderer and Stephen Dolan, review by Damien Doligez a=
nd<br>&nbsp; Hugo Heuzard)<br><br>- #13326(https://github.com/ocaml/ocaml/i=
ssues/13326): Implement Unix.O_APPEND on windows.<br>&nbsp; (Romain Beauxis=
, review by Miod Vallat, Gabriel Scherer and Antonin D=C3=A9cimo)<br><br>To=
ols:<br>--------<br><br>- #11716(https://github.com/ocaml/ocaml/issues/1171=
6): ocamllex: mismatched parentheses and curly brackets are now caught<br>&=
nbsp; by ocamllex, instead of causing invalid OCaml code to be generated.<b=
r>&nbsp; (Demi Marie Obenour, review by Damien Doligez and Xavier Leroy)<br=
><br>- #12904(https://github.com/ocaml/ocaml/issues/12904): Run the testsui=
te with ThreadSanitizer on a PR when label<br>&nbsp; `run-thread-sanitizer`=
 is added<br>&nbsp; (Olivier Nicole, suggested by S=C3=A9bastien Hinderer a=
nd David Allsopp, review by<br>&nbsp;&nbsp; Gabriel Scherer)<br><br>* (*bre=
aking change*) #13114(https://github.com/ocaml/ocaml/issues/13114): Support=
 ocamldebug remote debugging over IPv6 on all<br>&nbsp; platforms, and over=
 Unix domain sockets on Windows.<br>&nbsp; (Antonin D=C3=A9cimo, review by =
Gabriel Scherer and Miod Vallat)<br><br>- #13136(https://github.com/ocaml/o=
caml/issues/13136): Rewrite GDB extensions and macros in debugger-agnostic =
Python, and add<br>&nbsp; LLDB support for them.<br>&nbsp; (Nick Barnes, re=
view by Tim McGilchrist and Gabriel Scherer)<br><br>Toplevel:<br>---------<=
br><br>- #12891(https://github.com/ocaml/ocaml/issues/12891): Improved styl=
ing for initial prompt<br>&nbsp; (Florian Angeletti, review by Gabriel Sche=
rer)<br><br>- #13053(https://github.com/ocaml/ocaml/issues/13053): Improved=
 display of builtin types such as `_ list` when aliased.<br>&nbsp; (Samuel =
Vivien, review by Florian Angeletti)<br><br>Manual and documentation:<br>--=
-----------------------------------<br><br>- #13370(https://github.com/ocam=
l/ocaml/issues/13370): Document that that temporary variables holding GCd p=
ointers must<br>&nbsp; not be live across a GC.<br>&nbsp; (Demi Marie Obeno=
ur)<br><br>- #12298(https://github.com/ocaml/ocaml/issues/12298): Manual: e=
mphasize that Bigarray.int refers to an OCaml integer,<br>&nbsp; which does=
 not match the C int type.<br>&nbsp; (Edwin T=C3=B6r=C3=B6k, review by Flor=
ian Angeletti)<br><br>- #12868(https://github.com/ocaml/ocaml/issues/12868)=
: Manual: simplify style colours of the post-processed manual and API<br>&n=
bsp; HTML pages, and fix the search button icon<br>&nbsp; (Yawar Amin, revi=
ew by Simon Grondin, Gabriel Scherer, and Florian Angeletti)<br><br>- #1294=
9(https://github.com/ocaml/ocaml/issues/12949): document OCaml release cycl=
es and version strings in<br>&nbsp;&nbsp; `release-info/introduction.md`.<b=
r>&nbsp; (Florian Angeletti, review by Fabrice Buoro, Kate Deplaix, Damien =
Doligez, and<br>&nbsp;&nbsp; Gabriel Scherer)<br><br>- #12976(https://githu=
b.com/ocaml/ocaml/issues/12976): Manual: use webman/&lt;version&gt;/*.html =
and<br>&nbsp; webman/&lt;version&gt;/api/ for OCaml.org HTML manual generat=
ion<br>&nbsp; (Shakthi Kannan, review by Hannes Mehnert, and Florian Angele=
tti)<br><br>- #13045(https://github.com/ocaml/ocaml/issues/13045): Emphasiz=
e caution about behaviour of custom block finalizers.<br>&nbsp; (Nick Barne=
s)<br><br>- #13216(https://github.com/ocaml/ocaml/issues/13216): document t=
he new `caml_result` type in the FFI chapter of the manual.<br>&nbsp; (Gabr=
iel Scherer, review by Miod Vallat, Daniel B=C3=BCnzli, Nick Barnes,<br>&nb=
sp;&nbsp; Guillaume Munch-Maccagnoni and Antonin D=C3=A9cimo)<br><br>- #132=
87(https://github.com/ocaml/ocaml/issues/13287): stdlib/sys.mli: Update doc=
umentation on Sys.opaque_identity<br>&nbsp; following #9412(https://github.=
com/ocaml/ocaml/issues/9412).<br>&nbsp; (Matt Walker, review by Guillaume M=
unch-Maccagnoni and Vincent Laviron)<br><br>- #13295(https://github.com/oca=
ml/ocaml/issues/13295): Use syntax for deep effect handlers in the effect h=
andlers manual<br>&nbsp; page.<br>&nbsp; (KC Sivaramakrishnan, review by An=
il Madhavapeddy, Florian Angeletti and Miod<br>&nbsp;&nbsp; Vallat)<br><br>=
- #13424(https://github.com/ocaml/ocaml/issues/13424): Fix `Gc.quick_stat` =
documentation to clarify that returned fields<br>&nbsp; `live_words`, `live=
_blocks`, `free_words`, and `fragments` are not zero.<br>&nbsp; (Jan Midtga=
ard, review by Damien Doligez and KC Sivaramakrishnan)<br><br>- #13440(http=
s://github.com/ocaml/ocaml/issues/13440): Update documentation of `Gc.{cont=
rol,get,set}` to reflect fields<br>&nbsp; not currently supported on OCaml =
5.<br>&nbsp; (Jan Midtgaard, review by Gabriel Scherer)<br><br>- #13469(htt=
ps://github.com/ocaml/ocaml/issues/13469), #13474(https://github.com/ocaml/=
ocaml/issues/13474), #13535(https://github.com/ocaml/ocaml/issues/13535): D=
ocument that [Hashtbl.create n] creates a hash table<br>&nbsp; with a defau=
lt minimal size, even if [n] is very small or negative.<br>&nbsp; (Antonin =
D=C3=A9cimo, Nick Bares, report by Nikolaus Huber and Jan Midtgaard,<br>&nb=
sp;&nbsp; review by Florian Angeletti, Anil Madhavapeddy, Gabriel Scherer,<=
br>&nbsp;&nbsp; and Miod Vallat)<br><br>- #13666(https://github.com/ocaml/o=
caml/issues/13666): Rewrite parts of the example code around nested lists i=
n Chapter 6<br>&nbsp; (Polymorphism and its limitations -&gt; Polymorphic r=
ecursion) giving the<br>&nbsp; "depth" function [in the non-polymorphically=
-recursive part of the example]<br>&nbsp; a much more sensible behavior; al=
so fix a typo and some formatting.<br>&nbsp; (Frank Steffahn, review by Flo=
rian Angeletti)<br><br>- #13668(https://github.com/ocaml/ocaml/issues/13668=
): Document the basic support for unicode identifiers and the switch to<br>=
&nbsp;&nbsp; UTF-8 encoded Unicode text for OCaml source file<br>&nbsp; (Fl=
orian Angeletti, review by Nicol=C3=A1s Ojeda B=C3=A4r and Daniel B=C3=BCnz=
li)<br><br>Compiler user-interface and warnings:<br>-----------------------=
---------------------------<br><br>* (*breaking change*) #12084(https://git=
hub.com/ocaml/ocaml/issues/12084), #13669(https://github.com/ocaml/ocaml/is=
sues/13669), #13673(https://github.com/ocaml/ocaml/issues/13673): Check lin=
k order when creating archive and when using<br>&nbsp;&nbsp; ocamlopt.<br>&=
nbsp; (Hugo Heuzard, review by Stefan Muenzel and S=C3=A9bastien Hinderer)<=
br><br>- #12980(https://github.com/ocaml/ocaml/issues/12980): Explain type =
mismatch involving first-class modules by including<br>&nbsp; the module le=
vel error message<br>&nbsp; (Florian Angeletti, review by Vincent Laviron)<=
br><br>- #12985(https://github.com/ocaml/ocaml/issues/12985), #12988(https:=
//github.com/ocaml/ocaml/issues/12988): Better error messages for partially=
 applied functors.<br>&nbsp; (Florian Angeletti, report by Arthur Wendling,=
 review by Gabriel Scherer)<br><br>- #13034(https://github.com/ocaml/ocaml/=
issues/13034), #13260(https://github.com/ocaml/ocaml/issues/13260): Better =
error messages for mismatched function labels<br>&nbsp; (Florian Angeletti,=
 report by Daniel B=C3=BCnzli, review by Gabriel Scherer and<br>&nbsp;&nbsp=
; Samuel Vivien)<br><br>- #13051(https://github.com/ocaml/ocaml/issues/1305=
1): Add a "Syntax error" to error messages for invalid package signatures.<=
br>&nbsp; (Samuel Vivien, review by Gabriel Scherer)<br><br>- #13099(https:=
//github.com/ocaml/ocaml/issues/13099): Fix erroneous loading of cmis for s=
ome module type errors.<br>&nbsp; (Nick Roberts, review by Florian Angelett=
i)<br><br>- #13151(https://github.com/ocaml/ocaml/issues/13151), name confl=
icts explanation as a footnote<br>&nbsp; (Florian Angeletti, review by Gabr=
iel Scherer)<br><br>- #13228(https://github.com/ocaml/ocaml/issues/13228): =
Re-export Cmt2annot.{iterator,binary_part} which had become hidden<br>&nbsp=
; since #11288(https://github.com/ocaml/ocaml/issues/11288) and broke ocaml=
browser.<br>&nbsp; (David Allsopp, report by Jacques Garrigue, review by S=
=C3=A9bastien Hinderer)<br><br>- #13251(https://github.com/ocaml/ocaml/issu=
es/13251): Register printer for errors in Emitaux<br>&nbsp; (Vincent Laviro=
n, review by Miod Vallat and Florian Angeletti)<br><br>- #13255(https://git=
hub.com/ocaml/ocaml/issues/13255): Re-enable warning 34 for unused locally =
abstract types<br>&nbsp; (Nick Roberts, review by Chris Casinghino and Flor=
ian Angeletti)<br><br>- #12182(https://github.com/ocaml/ocaml/issues/12182)=
: Improve the type clash error message.<br>&nbsp; For example, this message=
:<br>&nbsp;&nbsp;&nbsp; This expression has type ...<br>&nbsp; is changed i=
nto:<br>&nbsp;&nbsp;&nbsp; The constant "42" has type ...<br>&nbsp; (Jules =
Aguillon, review by Gabriel Scherer and Florian Angeletti)<br><br>- #13471(=
https://github.com/ocaml/ocaml/issues/13471): add `-keywords &lt;version?+l=
ist&gt;` flag to define the list of keywords<br>&nbsp; recognized by the le=
xer, for instance `-keywords 5.2` disable the `effect`<br>&nbsp; keyword.<b=
r>&nbsp; (Florian Angeletti, review by Gabriel Scherer)<br><br>Internal/com=
piler-libs changes:<br>----------------------------------------<br><br>- #1=
3286(https://github.com/ocaml/ocaml/issues/13286): Distinguish unique ident=
ifiers `Shape.Uid.t` according to their<br>&nbsp; provenance: either an imp=
lementation or an interface.<br>&nbsp; (Ulysse G=C3=A9rard, review by Flori=
an Angeletti and Leo White)<br><br>- #13308(https://github.com/ocaml/ocaml/=
issues/13308): keep track of relations between declaration in the cmt files=
. This is<br>&nbsp; useful information for external tools for navigation an=
d analysis purposis.<br>&nbsp; (Ulysse G=C3=A9rard, Florian Angeletti, revi=
ew by Florian Angeletti and Gabriel<br>&nbsp; Scherer)<br><br><br>- #11129(=
https://github.com/ocaml/ocaml/issues/11129), #11148(https://github.com/oca=
ml/ocaml/issues/11148): enforce that ppxs do not produce `parsetree`s with<=
br>&nbsp; an empty list of universally quantified type variables<br>&nbsp; =
(`. int -&gt; int` instead of `'a . int -&gt; int'`)<br>&nbsp; (Florian Ang=
eletti, report by Simmo Saan, review by Gabriel Scherer)<br><br>- #12534(ht=
tps://github.com/ocaml/ocaml/issues/12534): document and refactor Matching.=
mk_failaction_pos<br>&nbsp; (Gabriel Scherer, review by Vincent Laviron and=
 Nick Roberts)<br><br>- #13076(https://github.com/ocaml/ocaml/issues/13076)=
: change the handling of Match_failure exits in the pattern-matching<br>&nb=
sp; compiler, to prepare for a complete fix for #7241(https://github.com/oc=
aml/ocaml/issues/7241)<br>&nbsp; (Gabriel Scherer, review by Thomas Refis a=
nd Nick Roberts)<br><br>- #12896(https://github.com/ocaml/ocaml/issues/1289=
6): Simplify the compilation of custom bytecode runtimes by explicitly<br>&=
nbsp; compiling the primitives file before calling the linker. Tidy-up both=
 the<br>&nbsp; generating code and the output itself for C code being gener=
ated by the<br>&nbsp; bytecode linker in `-custom` and `-output-*` modes.<b=
r>&nbsp; (David Allsopp, Antonin D=C3=A9cimo and Samuel Hym, review by Vinc=
ent Laviron)<br><br>- #12932(https://github.com/ocaml/ocaml/issues/12932): =
Remove useless code in Typecore.type_label_exp (was a fix for #4862(https:/=
/github.com/ocaml/ocaml/issues/4862))<br>&nbsp; (Jacques Garrigue, review b=
y Gabriel Scherer)<br><br>- #12943(https://github.com/ocaml/ocaml/issues/12=
943): Make transient_expr.scope a bitfield, and use it to store marks.<br>&=
nbsp; Marks are automatically allocated, and removed when leaving their sco=
pe.<br>&nbsp; Falls back to using TransientTypeSet when marks are exhausted=
.<br>&nbsp; (Jacques Garrigue and Takafumi Saikawa, review by Basile Cl=C3=
=A9ment)<br><br>- #12946(https://github.com/ocaml/ocaml/issues/12946): Make=
 generalization automatic when leaving scope.<br>&nbsp; As a result, the `C=
type.generalize*` and `Ctype.correct_levels` functions<br>&nbsp; were remov=
ed. The latter is now called `Ctype.duplicate_type`.<br>&nbsp; (Jacques Gar=
rigue and Takafumi Saikawa, review by Richard Eisenberg)<br><br>- #12968(ht=
tps://github.com/ocaml/ocaml/issues/12968): Attach location to constants in=
 the parsetree<br>&nbsp; (Jules Aguillon, review by Gabriel Scherer)<br><br=
>- #12959(https://github.com/ocaml/ocaml/issues/12959), #13055(https://gith=
ub.com/ocaml/ocaml/issues/13055): Avoid an internal error on recursive modu=
le type inconsistency<br>&nbsp; (Florian Angeletti, review by Jacques Garri=
gue and Gabriel Scherer)<br><br>- #13049(https://github.com/ocaml/ocaml/iss=
ues/13049): graphical debugging printer for types<br>&nbsp; (Florian Angele=
tti, review by Gabriel Scherer)<br><br>- #13074(https://github.com/ocaml/oc=
aml/issues/13074), #13082(https://github.com/ocaml/ocaml/issues/13082), #13=
084(https://github.com/ocaml/ocaml/issues/13084): refactoring in the patter=
n-matching compiler<br>&nbsp; (Gabriel Scherer, review by Thomas Refis, Vin=
cent Laviron and Nick Roberts)<br><br>- #13067(https://github.com/ocaml/oca=
ml/issues/13067): rework volatile memory access rules under TSan to conside=
r properly<br>&nbsp; aligned smaller-than-register read operations as atomi=
c, which gets rid of<br>&nbsp; false positives on s390x<br>&nbsp; (Miod Val=
lat, review by Fabien Buoro)<br><br>- #13162(https://github.com/ocaml/ocaml=
/issues/13162): Use quoted strings to clarify code being generated.<br>&nbs=
p; (Antonin D=C3=A9cimo, review by Miod Vallat and Gabriel Scherer)<br><br>=
- #13015(https://github.com/ocaml/ocaml/issues/13015): Emit floating-point =
literals in .rodata section on ELF arm64<br>&nbsp; platforms (Linux, *BSD).=
<br>&nbsp; (Miod Vallat, review by Nicol=C3=A1s Ojeda B=C3=A4r)<br><br>- #1=
3169(https://github.com/ocaml/ocaml/issues/13169), #13311(https://github.co=
m/ocaml/ocaml/issues/13311): Introduce a document data type for compiler me=
ssages<br>&nbsp; rather than relying on `Format.formatter -&gt; unit` closu=
res.<br>&nbsp; (Florian Angeletti, review by Gabriel Scherer)<br><br>- #131=
93(https://github.com/ocaml/ocaml/issues/13193): Remove the unused env_init=
 field from class blocks<br>&nbsp; (Vincent Laviron, review by Jacques Garr=
igue)<br><br>- #13257(https://github.com/ocaml/ocaml/issues/13257): integra=
te MetaOCaml in the Menhir grammar to ease MetaOCaml<br>&nbsp; maintenance.=
 This is a purely internal change: there is no support<br>&nbsp; in the lex=
er, so no change to the surface OCaml grammar.<br>&nbsp; (Oleg Kiselyov, Ga=
briel Scherer and Florian Angeletti,<br>&nbsp;&nbsp; review by Jeremy Yallo=
p)<br><br>- #13289(https://github.com/ocaml/ocaml/issues/13289): Use C99 fo=
r loop to reduce the scope of the for loop iterator.<br>&nbsp; (Antonin D=
=C3=A9cimo, review by Miod Vallat and Gabriel Scherer)<br><br>- #13336(http=
s://github.com/ocaml/ocaml/issues/13336): compiler-libs, split the `Printty=
p` in three to only keep<br>&nbsp; "user-friendly" functions in the `Printt=
yp` module.<br>&nbsp; (Florian Angeletti, review by Gabriel Scherer)<br><br=
>- #13361(https://github.com/ocaml/ocaml/issues/13361): split runtime/array=
.c functions to consistently expose<br>&nbsp; uniform_array and floatarray =
versions, use floatarray versions<br>&nbsp; in Float.Array.<br>&nbsp; (Gabr=
iel Scherer, review by Nicol=C3=A1s Ojeda B=C3=A4r)<br><br>- #13507(https:/=
/github.com/ocaml/ocaml/issues/13507): A small refactoring to [free_vars] t=
o make it a bit faster<br>&nbsp; by not allocating a list when the list is =
not necessary.<br>&nbsp; (Richard Eisenberg, review by Jacques Garrigue)<br=
><br>Build system:<br>------------------<br><br>- #12909(https://github.com=
/ocaml/ocaml/issues/12909): Reorganise how MKEXE_VIA_CC is built to make it=
 correct for MSVC by<br>&nbsp; grouping all the linker flags at the end of =
the C compiler commandline<br>&nbsp; (David Allsopp and Samuel Hym, review =
by Nicol=C3=A1s Ojeda B=C3=A4r)<br><br>- #12992(https://github.com/ocaml/oc=
aml/issues/12992), #13009(https://github.com/ocaml/ocaml/issues/13009): Che=
ck that flexlink can be executed only when building in a<br>&nbsp; native w=
indows environment.<br>&nbsp; (Romain Beauxis, review by David Allsopp and =
S=C3=A9bastien Hinderer)<br><br>- #12996(https://github.com/ocaml/ocaml/iss=
ues/12996): Only link with -lgcc_eh when available.<br>&nbsp; (Romain Beaux=
is, review by David Allsopp and Miod Vallat)<br><br>* (*breaking change*) #=
13200(https://github.com/ocaml/ocaml/issues/13200): Do not use CFLAGS for l=
inking.<br>&nbsp; (S=C3=A9bastien Hinderer, review by Gabriel Scherer, Anto=
nin D=C3=A9cimo,<br>&nbsp; Miod Vallat and Samuel Hym)<br><br>- #13201(http=
s://github.com/ocaml/ocaml/issues/13201), #13244(https://github.com/ocaml/o=
caml/issues/13244): Fix and speedup builds with TSan.<br>&nbsp; (S=C3=A9bas=
tien Hinderer, review by Miod Vallat, Gabriel Scherer and<br>&nbsp; Olivier=
 Nicole)<br><br>* (*breaking change*) #12578(https://github.com/ocaml/ocaml=
/issues/12578), #12589(https://github.com/ocaml/ocaml/issues/12589), #13322=
(https://github.com/ocaml/ocaml/issues/13322), #13519(https://github.com/oc=
aml/ocaml/issues/13519): Use configured CFLAGS and CPPFLAGS *only*<br>&nbsp=
; during the build of the compiler itself. Do not use them when<br>&nbsp; c=
ompiling third-party C sources through the compiler. Flags for<br>&nbsp; co=
mpiling third-party C sources can still be specified at configure<br>&nbsp;=
 time in the COMPILER_{BYTECODE,NATIVE}_{CFLAGS,CPPFLAGS}<br>&nbsp; configu=
ration variables.<br>&nbsp; (S=C3=A9bastien Hinderer, report by William Hu,=
 review by David Allsopp)<br><br>- #13285(https://github.com/ocaml/ocaml/is=
sues/13285): continue the merge of the sub-makefiles into the root<br>&nbsp=
; Makefile started with #11243(https://github.com/ocaml/ocaml/issues/11243)=
, #11248(https://github.com/ocaml/ocaml/issues/11248), #11268(https://githu=
b.com/ocaml/ocaml/issues/11268), #11420(https://github.com/ocaml/ocaml/issu=
es/11420), #11675(https://github.com/ocaml/ocaml/issues/11675),<br>&nbsp; #=
12198(https://github.com/ocaml/ocaml/issues/12198), #12321(https://github.c=
om/ocaml/ocaml/issues/12321), #12586(https://github.com/ocaml/ocaml/issues/=
12586), #12616(https://github.com/ocaml/ocaml/issues/12616), #12706(https:/=
/github.com/ocaml/ocaml/issues/12706) and #13048(https://github.com/ocaml/o=
caml/issues/13048).<br>&nbsp; (S=C3=A9bastien Hinderer, review by David All=
sopp and Florian Angeletti)<br><br>Bug fixes:<br>-------------<br><br>- #12=
854(https://github.com/ocaml/ocaml/issues/12854): Add a test in the regress=
ion suite that flags the bug #12825(https://github.com/ocaml/ocaml/issues/1=
2825).<br>&nbsp; (Luc Maranget)<br><br>- #12888(https://github.com/ocaml/oc=
aml/issues/12888): fix printing of uncaught exceptions in `.cmo` files pass=
ed on the<br>&nbsp; command-line of the toplevel.<br>&nbsp; (Nicol=C3=A1s O=
jeda B=C3=A4r, review by Florian Angeletti, report by Daniel B=C3=BCnzli)<b=
r><br>- #12910(https://github.com/ocaml/ocaml/issues/12910), #12920(https:/=
/github.com/ocaml/ocaml/issues/12920): Fix an unsound interaction between f=
irst-class modules<br>&nbsp; and polymorphic records by saving and restorin=
g univar_pairs.<br>&nbsp; (Stephen Dolan, review by Gabriel Scherer, report=
 by Jeremy Yallop)<br><br>- #12994(https://github.com/ocaml/ocaml/issues/12=
994): Remove un-used and unsafe caml_drop_continuation<br>&nbsp; (Tim McGil=
christ, reviewed by Gabriel Scherer and Miod Vallat)<br><br>- #12963(https:=
//github.com/ocaml/ocaml/issues/12963): Restore caml_runtime_parameters imp=
lementation. This primitive allows<br>&nbsp; programs to query the runtime =
parameters supplied to an OCaml program.<br>&nbsp; Implementation missing s=
ince OCaml 5.0.<br>&nbsp; (Tim McGilchrist, reviewed by David Allsopp and M=
iod Vallat)<br><br>- #13012(https://github.com/ocaml/ocaml/issues/13012): p=
arsing: Fix dropped attributes after a '-' or '+'<br>&nbsp; The syntax '-(1=
 [@foo])' was incorrectly parsed as '-1'.<br>&nbsp; (Jules Aguillon, review=
ed by Gabriel Scherer, report by Gabriel Scherer)<br><br>* (*breaking chang=
e*) #13070(https://github.com/ocaml/ocaml/issues/13070): On Windows, when c=
onfigured with bootstrapped flexdll, don't add<br>&nbsp; +flexdll to the se=
arch path when -nostdlib is specified (which then means<br>&nbsp; -L &lt;pa=
th-to-flexdll&gt; no longer gets passed to the system linker).<br>&nbsp; (D=
avid Allsopp, review by Florian Angeletti)<br><br>- #13089(https://github.c=
om/ocaml/ocaml/issues/13089): Fix bug in `runtime_events` library which cou=
ld result in garbled<br>&nbsp; output under Windows.<br>&nbsp; (B. Szilvasy=
, review by Nicol=C3=A1s Ojeda B=C3=A4r and Miod Vallat)<br><br>- #13088(ht=
tps://github.com/ocaml/ocaml/issues/13088): A few type-checker behaviors lo=
ok at a type to see if there are<br>&nbsp; any labeled arguments in it. Thi=
s sometimes required expansion, which<br>&nbsp; could, in obscure scenarios=
, result in superfluous type errors.<br>&nbsp; (Richard Eisenberg, review b=
y Gabriel Scherer and Jacques Garrigue)<br><br>- #13103(https://github.com/=
ocaml/ocaml/issues/13103): FreeBSD/amd64: properly annotate .o files with n=
on-executable stack<br>&nbsp; notes (Konstantin Belousov, review by Nicol=
=C3=A1s Ojeda B=C3=A4r)<br><br>- #13150(https://github.com/ocaml/ocaml/issu=
es/13150): improve a transitive-closure computation algorithm in the flambd=
a<br>&nbsp; middle-end to avoid a compilation time blowup on Menhir-generat=
ed code<br>&nbsp; (Florian Weimer, review by Gabriel Scherer and Pierre Cha=
mbart,<br>&nbsp;&nbsp; report by Richard Jones)<br><br>- #13166(https://git=
hub.com/ocaml/ocaml/issues/13166): Fix a MinGW/MSVC Sys.rename regression o=
n renaming a parent directory<br>&nbsp; to an empty child directory.<br>&nb=
sp; (Jan Midtgaard, review by Antonin D=C3=A9cimo, S=C3=A9bastien Hinderer,=
 and<br>&nbsp;&nbsp; David Allsopp)<br><br>- #13185(https://github.com/ocam=
l/ocaml/issues/13185), #13192(https://github.com/ocaml/ocaml/issues/13192):=
 Reject type-level module aliases on functor parameter<br>&nbsp; inside sig=
natures.<br>&nbsp; (Jacques Garrigue, report by Richard Eisenberg, review b=
y Florian Angeletti)<br><br>- #13170(https://github.com/ocaml/ocaml/issues/=
13170): Fix a bug that would result in some floating alerts `[@@@alert ...]=
`<br>&nbsp; incorrectly triggering Warning 53.<br>&nbsp; (Nicol=C3=A1s Ojed=
a B=C3=A4r, review by Chris Casinghino and Florian Angeletti)<br><br>- #132=
03(https://github.com/ocaml/ocaml/issues/13203): Do not issue warning 53 if=
 the compiler is stopping before attributes<br>&nbsp; have been accurately =
marked.<br>&nbsp; (Chris Casinghino, review by Florian Angeletti)<br><br>- =
#13207(https://github.com/ocaml/ocaml/issues/13207): Be sure to reload the =
register caching the exception handler in<br>&nbsp; caml_c_call and caml_c_=
call_stack_args, as its value may have been changed<br>&nbsp; if the OCaml =
stack is expanded during a callback.<br>&nbsp; (Miod Vallat, report by Vesa=
 Karvonen, review by Gabriel Scherer and<br>&nbsp;&nbsp; Xavier Leroy)<br><=
br>- #13209(https://github.com/ocaml/ocaml/issues/13209): Fix configure tes=
t that checks whether `ar` supports `@FILE`<br>&nbsp; arguments.<br>&nbsp; =
(Nicol=C3=A1s Ojeda B=C3=A4r, report by Boris D.)<br><br>- #13221(https://g=
ithub.com/ocaml/ocaml/issues/13221): Compute more accurate instruction size=
s for branch relocation on<br>&nbsp; POWER.<br>&nbsp; (Miod Vallat, review =
by Gabriel Scherer)<br><br>- #13252(https://github.com/ocaml/ocaml/issues/1=
3252): Rework register assignment in the interpreter code on m68k on Linux,=
<br>&nbsp; due to the %a5 register being used by Glibc.<br>&nbsp; (Miod Val=
lat, report by St=C3=A9phane Glondu, review by Gabriel Scherer and<br>&nbsp=
;&nbsp; Xavier Leroy)<br><br>- #13247(https://github.com/ocaml/ocaml/issues=
/13247): Disable lib_unix/kill test for MacOS AMD64 with TSan, linking<br>&=
nbsp; to llvm bug report causing infinite signal loops.<br>&nbsp; (Tim McGi=
lchrist, review by Olivier Nicole, Miod Vallat, S=C3=A9bastien Hinderer<br>=
&nbsp; and Gabriel Scherer)<br><br>- #13234(https://github.com/ocaml/ocaml/=
issues/13234), #13267(https://github.com/ocaml/ocaml/issues/13267): Open ru=
ntime events file in read-write mode on armel<br>&nbsp; (armv5) systems due=
 to atomic operations limitations on that<br>&nbsp; platform.<br>&nbsp; (St=
=C3=A9phane Glondu, review by Miod Vallat and Vincent Laviron)<br><br>- #13=
273(https://github.com/ocaml/ocaml/issues/13273): Fix a call to test in con=
figure.ac that was causing errors when<br>&nbsp; LDFLAGS contains several w=
ords.<br>&nbsp; (St=C3=A9phane Glondu, review by Miod Vallat)<br><br>- #132=
90(https://github.com/ocaml/ocaml/issues/13290): Fix uninitialized and out =
of bounds reads in runtime_events_consumer.c<br>&nbsp; (Edwin T=C3=B6r=C3=
=B6k, review by Miod Vallat and Antonin D=C3=A9cimo)<br><br>- #13306(https:=
//github.com/ocaml/ocaml/issues/13306): An algorithm in the type-checker th=
at checks two types for equality<br>&nbsp; could sometimes, in theory, retu=
rn the wrong answer. This patch fixes the<br>&nbsp; oversight. No known pro=
gram triggers the bug.<br>&nbsp; (Richard Eisenberg, review by Florian Ange=
letti)<br><br>- #13400(https://github.com/ocaml/ocaml/issues/13400): Initia=
lize th-&gt;signal_stack to avoid free of uninitialized data<br>&nbsp; if t=
he user calls caml_c_thread_unregister on the main thread.<br>&nbsp; (Richa=
rd W.M. Jones, review by Guillaume Munch-Maccagnoni and<br>&nbsp; Gabriel S=
cherer)<br><br>- #13140(https://github.com/ocaml/ocaml/issues/13140): POWER=
 back-end: fix issue with call to `caml_call_realloc_stack`<br>&nbsp; from =
a DLL<br>&nbsp; (Xavier Leroy, review by Miod Vallat)<br><br>- #13263(https=
://github.com/ocaml/ocaml/issues/13263), #13560(https://github.com/ocaml/oc=
aml/issues/13560): fix printing true and false in toplevel and error<br>&nb=
sp; messages (no more unexpected \#true)<br>&nbsp; (Florian Angeletti, repo=
rt by Samuel Vivien, review by Gabriel Scherer)<br><br>- #13388(https://git=
hub.com/ocaml/ocaml/issues/13388), #13540(https://github.com/ocaml/ocaml/is=
sues/13540): raises an error message (and not an internal compiler error)<b=
r>&nbsp; when two local substitutions are incompatible (for instance `modul=
e type<br>&nbsp; S:=3Dsig end type t:=3D(module S)`)<br>&nbsp; (Florian Ang=
eletti, report by Nailen Matschke, review by Gabriel Scherer, and<br>&nbsp;=
 Leo White)<br><br>- #13408(https://github.com/ocaml/ocaml/issues/13408): F=
ix misplaced debug runtime assertion triggerable by a race<br>&nbsp; betwee=
n domain exit and backup thread<br>&nbsp; (Miod Vallat and Gabriel Scherer,=
 report by Jan Midtgaard)<br><br>- #13417(https://github.com/ocaml/ocaml/is=
sues/13417): `Filename.quote_command`: fix handling of forward slashes in p=
rogram<br>&nbsp; path under Win32.<br>&nbsp; (Nicol=C3=A1s Ojeda B=C3=A4r, =
review by David Allsopp and Damien Doligez)<br><br>- #13501(https://github.=
com/ocaml/ocaml/issues/13501): Regression on mutually recursive types cause=
d by #12180(https://github.com/ocaml/ocaml/issues/12180).<br>&nbsp; Resusci=
tate Typedecl.update_type.<br>&nbsp; (Jacques Garrigue and Takafumi Saikawa=
, review by Florian Angeletti, Richard<br>&nbsp; Eisenberg and Gabriel Sche=
rer)<br><br>- #13502(https://github.com/ocaml/ocaml/issues/13502): Fix misi=
ndexing related to `Gc.finalise_last` that could prevent<br>&nbsp; finalise=
rs from being run.<br>&nbsp; (Nick Roberts, review by Mark Shinwell)<br><br=
>- #13495(https://github.com/ocaml/ocaml/issues/13495), #13514(https://gith=
ub.com/ocaml/ocaml/issues/13514): Fix typechecker crash while typing object=
s<br>&nbsp; (Jacques Garrigue, report by Nicol=C3=A1s Ojeda B=C3=A4r, revie=
w by<br>&nbsp;&nbsp; Nicolas Ojeda B=C3=A4r, Gabriel Scherer, Stephen Dolan=
, Florian Angeletti)<br><br>- #13391(https://github.com/ocaml/ocaml/issues/=
13391), #13551(https://github.com/ocaml/ocaml/issues/13551): fix a printing=
 bug with `-dsource` when using<br>&nbsp; raw literal inside a locally abst=
ract type constraint<br>&nbsp; (i.e. `let f: type \#for. ... `)<br>&nbsp; (=
Florian Angeletti, report by Nick Roberts, review by Richard Eisenberg)<br>=
<br>- #13520(https://github.com/ocaml/ocaml/issues/13520): Fix compilation =
of native-code version of systhreads. Bytecode fields<br>&nbsp; were being =
included in the thread descriptors.<br>&nbsp; (David Allsopp, review by S=
=C3=A9bastien Hinderer and Miod Vallat)<br><br>- #13541(https://github.com/=
ocaml/ocaml/issues/13541), #13591(https://github.com/ocaml/ocaml/issues/135=
91): Fix headers for C++ inclusion.<br>&nbsp; (Antonin D=C3=A9cimo, review =
by Nick Barnes, report by Kate Deplaix)<br><br>- #13579(https://github.com/=
ocaml/ocaml/issues/13579), #13583(https://github.com/ocaml/ocaml/issues/135=
83): Unsoundness involving non-injective types + gadts<br>&nbsp; (Jacques G=
arrigue, report by @v-gb,<br>&nbsp;&nbsp; review by Richard Eisenberg and F=
lorian Angeletti)<br><br>- #13598(https://github.com/ocaml/ocaml/issues/135=
98): Falsely triggered warning 56 [unreachable-case]<br>&nbsp; This was cau=
sed by unproper protection of the retyping function.<br>&nbsp; (Jacques Gar=
rigue, report by T=C3=B5ivo Leedj=C3=A4rv, review by Florian Angeletti)<br>=
<br>- #13603(https://github.com/ocaml/ocaml/issues/13603), #13604(https://g=
ithub.com/ocaml/ocaml/issues/13604): fix source printing in the presence of=
 the escaped raw<br>&nbsp; identifier `\#mod`.<br>&nbsp; (Florian Angeletti=
, report by Chris Casinghino, review by Gabriel Scherer)<br><br data-mce-bo=
gus=3D"1"></div></div></body></html>
--=_63434ef9-2b2b-4e9e-8402-8882eeed3419--