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> De la musique avant toute chose,<br> Et pour =
cela pr=C3=A9f=C3=A8re l=E2=80=99Impair<br>(Music first and foremost of all=
!<br> 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> match f () with<br> | x -> x<br>&=
nbsp; | effect Random_float, k -> Effect.Deep.continue k (Ra=
ndom.float 1.0)<br><br> This new syntax adds a new `effect` keyword, =
which may break existing code.<br> To improve backward compatibility,=
this new keyword can be disabled with<br> 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> missing port from OCaml 4 (except for the native compiler s=
upport for 32-bit<br> architectures which is not planned)<br><br>- Re=
-introduced statistical memory profiling (statmemprof)<br><br> 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> program. In OCaml 5, each domain can be monitored independently w=
hile child<br> 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> type saison =
=3D Hiver | =C3=89t=C3=A9 | Printemps | Automne<br><br> The OCaml lex=
er has been extended to support a modest subset of Unicode<br> 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> =
The internal implementation of `Dynarray` now uses an unboxed representatio=
n<br> which avoids the need of storing items wrapped in a `Some x` bl=
ock and thus<br> 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> the provenance of identifiers (previous versions could co=
nfuse an interface and<br> implementation identifier). Similarly, the=
metadata now tracks more precisely<br> the association between decla=
rations and definitions. For instance, in<br><br> module =
X =3D struct let x =3D 0 end<br> module M: sig<br> &=
nbsp; val x: int<br> end =3D struct<br>=
let x =3D 1<br>  =
; include X<br> end<br><br> 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> 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> =
opam update<br> 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> op=
am update<br> opam switch create <switch_name> ocam=
l-variants.5.3.0+options <option_list><br><br>where `<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> =
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> (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> (David Allsopp, Antonin D=C3=A9cimo, Samuel Hym, and Miod Vall=
at, review by Nicol=C3=A1s<br> Ojeda B=C3=A4r)<br><br>- #13093(=
https://github.com/ocaml/ocaml/issues/13093): Allow building the MSVC port =
with clang-cl.<br> (Antonin D=C3=A9cimo, review by Nicol=C3=A1s Ojeda=
B=C3=A4r, Samuel Hym,<br> 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>=
(Leo White, Tom Kelly, Anil Madhavapeddy, KC Sivaramakrishnan, Xavie=
r Leroy<br> 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> compatible identifiers.<br> (Xavier Ler=
oy and Florian Angeletti, review by Daniel B=C3=BCnzli and<br> =
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) -> ...`<br> (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> annotations.<br=
> (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> =
This restores a notable OCaml 4 feature that was missing<br> in OCam=
l 5.<br> (Nick Barnes, review by Stephen Dolan, Jacques-Henri Jourdan=
<br> and Guillaume Munch-Maccagnoni).<br><br><br>- #13419(https=
://github.com/ocaml/ocaml/issues/13419): Fix memory bugs in runtime events =
system.<br> (B. Szilvasy and Nick Barnes, review by Miod Vallat, Nick=
Barnes,<br> 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> (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> (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> (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> parameter.<br> (KC Sivaramakrishnan, review by Guillaume =
Munch-Maccagnoni, Miod Vallat,<br> 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=
> (B. Szilvasy, review by Miod Vallat, Nick Barnes, Olivier Nicole,<b=
r> Gabriel Scherer and Damien Doligez)<br><br>- #12789(https://=
github.com/ocaml/ocaml/issues/12789): Restore caml_unregister_frametable fr=
om OCaml 4<br> (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> (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> use=
of 'encoded exception values' in the FFI.<br> (Gabriel Scherer, revi=
ew by Damien Doligez,<br> Guillaume Munch-Maccagnoni and Xavier=
Leroy,<br> 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> =
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> (Guillaume Munch-Maccagnoni, review by Damie=
n Doligez, Xavier Leroy<br> and Gabriel Scherer)<br><br>- #1308=
6(https://github.com/ocaml/ocaml/issues/13086): Avoid spurious major GC sli=
ces.<br> (Damien Doligez, report by Stephen Dolan, review by Gabriel =
Scherer<br> 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> (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> cleanup of camlatomic.h)<br> (=
David Allsopp, review by Antonin D=C3=A9cimo, S=C3=A9bastien Hinderer, Samu=
el Hym,<br> 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> (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> (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> <caml/misc.h> to test the support of sp=
ecific atributes in C<br> code. Introduce fallthrough as a wrapper ar=
ound the fallthrough<br> attribute.<br> (Antonin D=C3=A9cimo, r=
eview by Nicol=C3=A1s Ojeda B=C3=A4r, Xavier Leroy, and<br> 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> 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> and Miod Vallat)<br><br>- #13239(https://github.com/o=
caml/ocaml/issues/13239): Check whether the compiler supports the labels as=
values<br> 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> with MSVC or clang-cl.<br> (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> for the purpose of displaying backtra=
ces correctly in GDB.<br> (Tim McGilchrist, review by Miod Vallat, Ga=
briel Scherer and<br> 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> _Alignas. Ensures that stat data is alwa=
ys aligned to the best<br> boundary.<br> (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> compiler attributes with clang-cl.<br> (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> clang-cl or MSVC. Provide fixes too.<br> (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> runtime assertions.<br> (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> so that it no longer produces=
dangling registered bytecode fragments.<br> (Xavier Leroy, report by=
Jan Midtgaard, analysis by Stephen Dolan,<br> review by Miod V=
allat)<br><br>- #13407(https://github.com/ocaml/ocaml/issues/13407): Add Ru=
ntime_events.EV_EMPTY_MINOR<br> (Thomas Leonard)<br><br>- #13522(http=
s://github.com/ocaml/ocaml/issues/13522): Confirm runtime events ring is st=
ill active after callback.<br> (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> (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> 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> fix a soundness bug in th=
e pattern-matching compiler<br> when side-effects mutate the scrutine=
e during matching.<br> (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> because side-effects =
may mutate the scrutinee during<br> matching. (This warning is disabl=
ed by default, as this rarely<br> happens and its performance impact =
is typically not noticeable.)<br> (Gabriel Scherer, review by Nick Ro=
berts, Florian Angeletti<br> and David Allsopp)<br><br>- #13179=
(https://github.com/ocaml/ocaml/issues/13179): Fix evaluation of toplevel l=
ets in classes containing<br> local opens<br> (Vincent Laviron,=
review by Hugo Heuzard, Nathana=C3=ABlle Courant<br> 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> (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> (Gabriel Scherer, suggestions by Vincent Laviron,<br> &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> (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> =
; result of the user-supplied function `rand`, and improve the<br> er=
ror message that is produced when this result is invalid.<br> (Fran=
=C3=A7ois Pottier, review by Florian Angeletti, Daniel B=C3=BCnzli<br> =
; and Gabriel Scherer)<br><br>- #12133(https://github.com/ocaml/ocaml=
/issues/12133): Expose support for printing substrings in Format<br> =
(Florian Angeletti, review by Daniel B=C3=BCnzli, Gabriel Scherer<br> =
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> (Kate Deplaix and Oscar Butler-Aldridge, review by =
Nicol=C3=A1s Ojeda B=C3=A4r,<br> 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> (Nick Barnes=
, review by Gabriel Scherer, Guillaume Munch-Maccagnoni, and<br> Vinc=
ent Laviron)<br><br>- #13144(https://github.com/ocaml/ocaml/issues/13144): =
Dynarray.{equal, compare}<br> (Gabriel Scherer,<br> revie=
w by Jeremy Yallop, Daniel B=C3=BCnzli and Olivier Nicole,<br> =
request by Olivier Nicole)<br><br>- #13171(https://github.com/ocaml/ocaml/i=
ssues/13171): expose `Domain.self_index : unit -> int` (a somewhat-dense=
<br> indexing of currently-running domains) for advanced use-cases of=
<br> domain-indexed concurrent data structures.<br> (Gabriel Sc=
herer,<br> review by KC Sivaramakrishnan, Miod Vallat and Nicol=
=C3=A1s Ojeda B=C3=A4r,<br> report by Vesa Karvonen)<br><br>- #=
13197(https://github.com/ocaml/ocaml/issues/13197): Dynarray.blit, which al=
lows to extend the destination<br> dynarray (0 <=3D dst_pos <=
=3D dst_length).<br> (Gabriel Scherer, report by Hazem Elmasry,<br>&n=
bsp; 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=
> Previously, Uchar.hash was aliased to Uchar.to_int. If you need tha=
t behavior,<br> change your module instantiation from eg `module HT =
=3D Hashtbl.Make(Uchar)` to<br> ```<br> module HT =
=3D Hashtbl.Make(struct<br> ...<br> &nbs=
p; let hash =3D Uchar.to_int<br> end)<b=
r> ```<br> If the current implementation is desired, and you ha=
ve a hashtable module `HT`<br> (produced with the `Make` functor) in =
persistent storage, use `HT.rebuild` to<br> ensure it doesn't break w=
hen reading from or writing to buckets.<br> (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> (Guillaume Munch-Maccagnoni, report by Benjamin =
Monate, review by<br> 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> to Dynarray.<br> =
(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> Hugo Heuzard)<br><br>- #13326(https://github.com/ocaml/ocaml/i=
ssues/13326): Implement Unix.O_APPEND on windows.<br> (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> (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> `run-thread-sanitizer`=
is added<br> (Olivier Nicole, suggested by S=C3=A9bastien Hinderer a=
nd David Allsopp, review by<br> Gabriel Scherer)<br><br>* (*bre=
aking change*) #13114(https://github.com/ocaml/ocaml/issues/13114): Support=
ocamldebug remote debugging over IPv6 on all<br> platforms, and over=
Unix domain sockets on Windows.<br> (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> LLDB support for them.<br> (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> (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> (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> not be live across a GC.<br> (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> which does=
not match the C int type.<br> (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> (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> `release-info/introduction.md`.<b=
r> (Florian Angeletti, review by Fabrice Buoro, Kate Deplaix, Damien =
Doligez, and<br> Gabriel Scherer)<br><br>- #12976(https://githu=
b.com/ocaml/ocaml/issues/12976): Manual: use webman/<version>/*.html =
and<br> webman/<version>/api/ for OCaml.org HTML manual generat=
ion<br> (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> (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> (Gabr=
iel Scherer, review by Miod Vallat, Daniel B=C3=BCnzli, Nick Barnes,<br>&nb=
sp; 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> following #9412(https://github.=
com/ocaml/ocaml/issues/9412).<br> (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> page.<br> (KC Sivaramakrishnan, review by An=
il Madhavapeddy, Florian Angeletti and Miod<br> Vallat)<br><br>=
- #13424(https://github.com/ocaml/ocaml/issues/13424): Fix `Gc.quick_stat` =
documentation to clarify that returned fields<br> `live_words`, `live=
_blocks`, `free_words`, and `fragments` are not zero.<br> (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> not currently supported on OCaml =
5.<br> (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> with a defau=
lt minimal size, even if [n] is very small or negative.<br> (Antonin =
D=C3=A9cimo, Nick Bares, report by Nikolaus Huber and Jan Midtgaard,<br>&nb=
sp; review by Florian Angeletti, Anil Madhavapeddy, Gabriel Scherer,<=
br> 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> (Polymorphism and its limitations -> Polymorphic r=
ecursion) giving the<br> "depth" function [in the non-polymorphically=
-recursive part of the example]<br> a much more sensible behavior; al=
so fix a typo and some formatting.<br> (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>=
UTF-8 encoded Unicode text for OCaml source file<br> (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> 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> the module le=
vel error message<br> (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> (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> (Florian Angeletti,=
report by Daniel B=C3=BCnzli, review by Gabriel Scherer and<br>  =
; 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> (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> (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> (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> =
; since #11288(https://github.com/ocaml/ocaml/issues/11288) and broke ocaml=
browser.<br> (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> (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> (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> For example, this message=
:<br> This expression has type ...<br> is changed i=
nto:<br> The constant "42" has type ...<br> (Jules =
Aguillon, review by Gabriel Scherer and Florian Angeletti)<br><br>- #13471(=
https://github.com/ocaml/ocaml/issues/13471): add `-keywords <version?+l=
ist>` flag to define the list of keywords<br> recognized by the le=
xer, for instance `-keywords 5.2` disable the `effect`<br> keyword.<b=
r> (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> provenance: either an imp=
lementation or an interface.<br> (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> useful information for external tools for navigation an=
d analysis purposis.<br> (Ulysse G=C3=A9rard, Florian Angeletti, revi=
ew by Florian Angeletti and Gabriel<br> 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> an empty list of universally quantified type variables<br> =
(`. int -> int` instead of `'a . int -> int'`)<br> (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> (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> (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> generating code and the output itself for C code being gener=
ated by the<br> bytecode linker in `-custom` and `-output-*` modes.<b=
r> (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> (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> Falls back to using TransientTypeSet when marks are exhausted=
.<br> (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> As a result, the `C=
type.generalize*` and `Ctype.correct_levels` functions<br> were remov=
ed. The latter is now called `Ctype.duplicate_type`.<br> (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> (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> (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> (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> (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> aligned smaller-than-register read operations as atomi=
c, which gets rid of<br> false positives on s390x<br> (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> platforms (Linux, *BSD).=
<br> (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> rather than relying on `Format.formatter -> unit` closu=
res.<br> (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> (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> maintenance.=
This is a purely internal change: there is no support<br> in the lex=
er, so no change to the surface OCaml grammar.<br> (Oleg Kiselyov, Ga=
briel Scherer and Florian Angeletti,<br> 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> (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> "user-friendly" functions in the `Printt=
yp` module.<br> (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> uniform_array and floatarray =
versions, use floatarray versions<br> in Float.Array.<br> (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> by not allocating a list when the list is =
not necessary.<br> (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> grouping all the linker flags at the end of =
the C compiler commandline<br> (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> native w=
indows environment.<br> (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> (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> (S=C3=A9bastien Hinderer, review by Gabriel Scherer, Anto=
nin D=C3=A9cimo,<br> 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> (S=C3=A9bas=
tien Hinderer, review by Miod Vallat, Gabriel Scherer and<br> 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> =
; during the build of the compiler itself. Do not use them when<br> c=
ompiling third-party C sources through the compiler. Flags for<br> co=
mpiling third-party C sources can still be specified at configure<br> =
time in the COMPILER_{BYTECODE,NATIVE}_{CFLAGS,CPPFLAGS}<br> configu=
ration variables.<br> (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> =
; 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> #=
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> (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> (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> command-line of the toplevel.<br> (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> and polymorphic records by saving and restorin=
g univar_pairs.<br> (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> (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> programs to query the runtime =
parameters supplied to an OCaml program.<br> Implementation missing s=
ince OCaml 5.0.<br> (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> The syntax '-(1=
[@foo])' was incorrectly parsed as '-1'.<br> (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> +flexdll to the se=
arch path when -nostdlib is specified (which then means<br> -L <pa=
th-to-flexdll> no longer gets passed to the system linker).<br> (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> output under Windows.<br> (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> any labeled arguments in it. Thi=
s sometimes required expansion, which<br> could, in obscure scenarios=
, result in superfluous type errors.<br> (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> 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> middle-end to avoid a compilation time blowup on Menhir-generat=
ed code<br> (Florian Weimer, review by Gabriel Scherer and Pierre Cha=
mbart,<br> 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> to an empty child directory.<br>&nb=
sp; (Jan Midtgaard, review by Antonin D=C3=A9cimo, S=C3=A9bastien Hinderer,=
and<br> 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> inside sig=
natures.<br> (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> incorrectly triggering Warning 53.<br> (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> have been accurately =
marked.<br> (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> caml_c_call and caml_c_=
call_stack_args, as its value may have been changed<br> if the OCaml =
stack is expanded during a callback.<br> (Miod Vallat, report by Vesa=
Karvonen, review by Gabriel Scherer and<br> Xavier Leroy)<br><=
br>- #13209(https://github.com/ocaml/ocaml/issues/13209): Fix configure tes=
t that checks whether `ar` supports `@FILE`<br> arguments.<br> =
(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> POWER.<br> (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> due to the %a5 register being used by Glibc.<br> (Miod Val=
lat, report by St=C3=A9phane Glondu, review by Gabriel Scherer and<br> =
; 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> (Tim McGi=
lchrist, review by Olivier Nicole, Miod Vallat, S=C3=A9bastien Hinderer<br>=
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> (armv5) systems due=
to atomic operations limitations on that<br> platform.<br> (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> LDFLAGS contains several w=
ords.<br> (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> (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> could sometimes, in theory, retu=
rn the wrong answer. This patch fixes the<br> oversight. No known pro=
gram triggers the bug.<br> (Richard Eisenberg, review by Florian Ange=
letti)<br><br>- #13400(https://github.com/ocaml/ocaml/issues/13400): Initia=
lize th->signal_stack to avoid free of uninitialized data<br> if t=
he user calls caml_c_thread_unregister on the main thread.<br> (Richa=
rd W.M. Jones, review by Guillaume Munch-Maccagnoni and<br> 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> from =
a DLL<br> (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> (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> when two local substitutions are incompatible (for instance `modul=
e type<br> S:=3Dsig end type t:=3D(module S)`)<br> (Florian Ang=
eletti, report by Nailen Matschke, review by Gabriel Scherer, and<br> =
Leo White)<br><br>- #13408(https://github.com/ocaml/ocaml/issues/13408): F=
ix misplaced debug runtime assertion triggerable by a race<br> betwee=
n domain exit and backup thread<br> (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> path under Win32.<br> (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> Resusci=
tate Typedecl.update_type.<br> (Jacques Garrigue and Takafumi Saikawa=
, review by Florian Angeletti, Richard<br> 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> finalise=
rs from being run.<br> (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> (Jacques Garrigue, report by Nicol=C3=A1s Ojeda B=C3=A4r, revie=
w by<br> 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> raw literal inside a locally abst=
ract type constraint<br> (i.e. `let f: type \#for. ... `)<br> (=
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> were being =
included in the thread descriptors.<br> (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> (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> (Jacques G=
arrigue, report by @v-gb,<br> 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> This was cau=
sed by unproper protection of the retyping function.<br> (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> identifier `\#mod`.<br> (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--