OCaml releases 4.13.0 and 4.12.1
Florian Angeletti <[email protected]> Fri, 24 Sep 2021 20:25:51 +0200 (CEST)
| Newsgroups | gmane.comp.lang.caml.announce |
|---|---|
| Message-ID | <[email protected]> |
--=_ce9e6cc3-57b0-4aff-be59-fbf0570f4b8c
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable
Dear OCaml users,=20
We have the pleasure of celebrating the 175th anniversary of the discovery =
of Neptune=20
by announcing the joint releases of OCaml version 4.13.0 and 4.12.1.=20
Some of the highlights in the 4.13.0 release are:=20
- Safe points: a multicore prerequisite that ensures that ocamlopt-generate=
d code can always be interrupted.=20
- The best-fit GC allocation policy is now the default policy (and many oth=
er GC improvements).=20
- Named existential type variables in pattern matching: `Showable (type a) =
(x, show : a * (a -> string))`.=20
- Improved error messages for functor application and functor types.=20
- Let-punning for monadic let: `let* x =3D x in` can be shortened to `let* =
x in`.=20
- Module type substitutions `SIG with module type T =3D F(X).S`.=20
- Many other quality of life improvements=20
- Many bug fixes=20
The 4.12.1 release is a collection of safe bug fixes, cherry-picked from th=
e 4.13.0 development=20
cycle. If you were using OCaml 4.12.0 and cannot yet upgrade to 4.13.0, thi=
s release is for you.=20
The full list of changes can be found in the changelogs below.=20
Those releases are available as OPAM switches, and as a source download her=
e:=20
https://github.com/ocaml/ocaml/archive/4.13.0.tar.gz=20
https://caml.inria.fr/pub/distrib/ocaml-4.13/=20
and there:=20
https://github.com/ocaml/ocaml/archive/4.12.1.tar.gz=20
https://caml.inria.fr/pub/distrib/ocaml-4.12/=20
Happy hacking,=20
-- Florian Angeletti for the OCaml team.=20
OCaml 4.12.1 (24 September 2021)=20
------------------------------------------------=20
### Bug fixes:=20
- #10107: Ensure modules compiled with -afl-instrument can still link on=20
platforms without AFL support.=20
(David Allsopp, review by Xavier Leroy)=20
- #10294, #10295: fix an assert-failure in pattern-matching compilation=20
(Gabriel Scherer, review by Thomas Refis and Luc Maranget,=20
report by Nicol=C3=A1s Ojeda B=C3=A4r)=20
- #10310: configure's --enable-spacetime option now causes an error rather =
than=20
being silently ignored.=20
(David Allsopp, review by Gabriel Scherer)=20
- #10351: Fix DLL loading with binutils 2.36+ on mingw-w64=20
(David Allsopp, review by Nicol=C3=A1s Ojeda B=C3=A4r)=20
- #10442, #10446: Fix regression in the toplevel to #directory caused by=20
corrections and improvements to the Load_path in #9611. #directory now=20
adds the path to the start of the load path again (so files in the newly=20
added directory take priority).=20
(David Allsopp, report by Vasile Rotaru, review by Florian Angeletti=20
and Nicol=C3=A1s Ojeda B=C3=A4r)=20
- #10449: Fix major GC work accounting (the GC was running too fast).=20
(Damien Doligez, report by Stephen Dolan, review by Nicol=C3=A1s Ojeda B=C3=
=A4r=20
and Sadiq Jaffer)=20
- #10478: Fix segfault under Windows due to a mistaken initialization of th=
read=20
ID when a thread starts.=20
(David Allsopp, Nicol=C3=A1s Ojeda B=C3=A4r, review by Xavier Leroy)=20
- #10626, #10628: Wrong reloading of the x86-64 instruction for=20
integer multiplication by a constant, causing the assembler to=20
reject the ocamlopt-generated code.=20
(Xavier Leroy, report by Dave Aitken, review by Vincent Laviron)=20
OCaml 4.13.0 (24 September 2021)=20
------------------------------------------------=20
### Progress towards Multicore:=20
- #10039: Safepoints=20
Add poll points to native generated code. These are effectively=20
zero-sized allocations and fix some signal and remembered set=20
issues. Also multicore prerequisite.=20
(Sadiq Jaffer, Stephen Dolan, Damien Doligez, Xavier Leroy,=20
Anmol Sahoo, Mark Shinwell, review by Damien Doligez, Xavier Leroy,=20
and Mark Shinwell)=20
- #9876: do not cache the young_limit GC variable in a processor register.=
=20
This affects the ARM64, PowerPC and RISC-V ports, making signal handling=20
and minor GC triggers more reliable, at the cost of a small slowdown.=20
(Xavier Leroy, review by Nicol=C3=A1s Ojeda B=C3=A4r)=20
### Language features (highlights):=20
- #9584, #7074: Allow to name existentials in pattern-matching=20
One can now write '(Cstr (type a) (x, y : int * a))' to give a name to=20
existentials freshly introduced by GADT constructors.=20
(Jacques Garrigue, review by Leo White and Gabriel Scherer)=20
### Compiler user-interface and warnings (highlights):=20
- #9331: Improve error messages for functor application and functor types.=
=20
(Florian Angeletti and Gabriel Radanne, review by Leo White)=20
* #10118, #10140: enable warning 6 [labels-omitted] by default.=20
The following now warns:=20
let f ~x y =3D ... in f 3 5=20
the callsite (f 3 5) has to be turned into (f ~x:3 5).=20
This prevents mistakes where two arguments of the same types are swapped.=
=20
(Note: Dune already enables this warning by default.)=20
(Gabriel Scherer, review by Xavier Leroy and Florian Angeletti,=20
report by ygrek)=20
### Manual and documentation (highlights):=20
- #10247: Add initial tranche of examples to reference manual.=20
Adds some eighty examples to the reference manual, principally to the=20
expressions and patterns sections.=20
https://ocaml.org/releases/4.13/manual/patterns.html=20
(John Whitington, review by Xavier Leroy, Gabriel Scherer, @Fourchaux, and=
=20
Florian Angeletti)=20
- #9987, #9988, #9996, #9997: add an odoc mode for the documentation=20
of the standard library and compiler library=20
(Florian Angeletti, review by David Allsopp, S=C3=A9bastien Hinderer,=20
and Gabriel Scherer)=20
### Standard library (highlights):=20
- #944: Add some missing C99 float operations. `Stdlib` now contains=20
the inverse hyperbolic functions=20
`acosh`, `asinh`, and `atanh`.=20
These functions were also added to module `Stdlib.Float` together with=20
`exp2`, `log2`, `cbrt`, `erf`, and `erfc`.=20
Full support on MSVC requires VS2013+ but emulated versions are=20
still available (for now) for older compilers.=20
(Markus Mottl, review by David Allsopp, Olivier Andrieu, Florian Angeletti,=
=20
Nicol=C3=A1s Ojeda B=C3=A4r, Daniel B=C3=BCnzli, Fabian @copy, Pascal Cuoq,=
Damien=20
Doligez, S=C3=A9bastien Hinderer, Jacques-Henri Jourdan, Xavier Leroy, Guil=
laume=20
Melquiond, Perry E. Metzger, Runhang Li, Gabriel Scherer, Mark Shinwell,=20
Bernhard Schommer and Christophe Troestler)=20
- #9582: Add Array.{find_opt,find_map,split,combine}.=20
(Nicol=C3=A1s Ojeda B=C3=A4r, review by Daniel B=C3=BCnzli and Gabriel Sche=
rer)=20
- #9533: Added String.starts_with and String.ends_with.=20
(Bernhard Schommer, review by Daniel B=C3=BCnzli, Gabriel Scherer and=20
Alain Frisch)=20
### Code generation and optimizations (highlights):=20
- #10404: Add a generic backward dataflow analyzer and use it to speed up=
=20
liveness analysis=20
(Xavier Leroy, review by Gabriel Scherer, Greta Yorsh, Mark Shinwell)=20
- #10414: Avoid compilation times exponential in the nesting of loops=20
in the spilling and reloading passes=20
(Xavier Leroy, review by Vincent Laviron)=20
### Internal typechecker changes (highlights):=20
- #10170: Maintain more structural information in type-checking errors=20
A mostly-internal change that preserves more information in errors=20
during type checking; most significantly, it split the errors from=20
unification, moregen, and type equality into three different types.=20
(Antal Spector-Zabusky and Mekhrubon Tuarev, review by Leo White,=20
Florian Angeletti, and Jacques Garrigue)=20
- #9994: Make Types.type_expr a private type, and abstract marking mechanis=
m=20
(Jacques Garrigue and Takafumi Saikawa,=20
review by Gabriel Scherer and Leo White)=20
### Runtime system (highlights):=20
- #10188, #10213: Switch the default allocation policy to best-fit and adju=
st=20
the default overhead parameter accordingly.=20
(Damien Doligez, review by Josh Berdine and Xavier Leroy)=20
- #10549: Stack overflow detection and naked pointers checking for ARM64=20
(Xavier Leroy, review by Stephen Dolan)=20
- #9934: Optimise sweeping using prefetching.=20
(Stephen Dolan and Will Hasenplaugh, review by David Allsopp, Xavier=20
Leroy and Damien Doligez, benchmarking by Shubham Kumar and KC=20
Sivaramakrishnan)=20
- #10194: Change compaction-triggering heuristic: use the overhead measured=
=20
by the previous GC cycle instead of an indirect (and noisy) computation=20
of the current overhead.=20
(Damien Doligez, review by Stephen Dolan)=20
- #10449: Fix major GC work accounting (the GC was running too fast).=20
(Damien Doligez, report by Stephen Dolan, review by Nicol=C3=A1s Ojeda B=C3=
=A4r and=20
Sadiq Jaffer)=20
### Language features:=20
- #10013: Let-punning=20
Allow 'let* x in ...' and 'let%ext x in ...' as shorthand for=20
'let* x =3D x in ...' and 'let%ext x =3D x in ...' respectively.=20
(Stephen Dolan, review by Gabriel Scherer)=20
- #10133: module type substitutions=20
Allow 'SIG with module type T =3D F(X).S', 'SIG with module type T :=3D sig=
end'=20
and their local equivalent `module type T :=3D sig type u end`=20
(Florian Angeletti, review by Gabriel Radanne and Leo White)=20
### Type system:=20
* #10081: Typecheck `x |> f` and `f @@ x` as `(f x)`=20
(Alain Frisch, review by Jacques Garrigue, Josh Berdine and Thomas Refis)=
=20
### Runtime system:=20
- #10318: Windows Unicode runtime functions are no longer marked as=20
experimental.=20
(Nicol=C3=A1s Ojeda B=C3=A4r, review by David Allsopp)=20
- #9284: Add -config option to display the configuration of ocamlrun on std=
out,=20
including the search path for shared stub libraries.=20
(David Allsopp, review by Xavier Leroy)=20
- #9919: Introduce caml_record_backtraces and update Interfacing with C to=
=20
refer to it (previous instruction to use caml_record_backtrace primitive wa=
s=20
not possible without defining CAML_INTERNALS)=20
(David Allsopp, review by Xavier Leroy)=20
- #10102: Ignore PROFINFO_WIDTH if WITH_PROFINFO is not defined (technicall=
y=20
a breaking change if the configuration system was being abused before).=20
(David Allsopp, review by Xavier Leroy)=20
- #10107: Ensure modules compiled with -afl-instrument can still link on=20
platforms without AFL support.=20
(David Allsopp, review by Xavier Leroy)=20
* #10098: Improve command-line parsing in ocamlrun: strictly recognise opti=
ons,=20
be more informative for `ocamlrun -I` and support `--` for terminating opti=
ons=20
parsing.=20
(David Allsopp, review by Xavier Leroy)=20
- #10101: Add -help/--help option to ocamlrun.=20
(David Allsopp, review by Xavier Leroy)=20
- #10136: Minor clean-ups in runtime/io.c and runtime/caml/io.h=20
(Xavier Leroy, review by David Allsopp and Guillaume Munch-Maccagnoni)=20
- #10171: Tweak the naked pointers checker so that processes which trigger =
the=20
alarm always exit with non-zero status (i.e. exit(0) becomes exit(70)).=20
(David Allsopp, review by Xavier Leroy)=20
- #10212: Simplify and improve the Windows-specific code that connects=20
to the debugger via a socket.=20
(Antonin D=C3=A9cimo, review by Xavier Leroy)=20
- #10217: Fix a segfault in a corner case of compaction (reported in #9853)=
=20
(Damien Doligez, report by Sadiq Jaffer, review by Stephen Dolan)=20
- #10250, #10266: Dynamically allocate alternate signal stacks to=20
accommodate changes in Glibc 2.34.=20
(Xavier Leroy, reports by Tomasz K=C5=82oczko and R.W.M. Jones, review by A=
nil=20
Madhavapeddy, Stephen Dolan, and Florian Angeletti)=20
### Code generation and optimizations:=20
- #1400: Add an optional invariants check on Cmm, which can be activated=20
with the -dcmm-invariants flag=20
(Vincent Laviron, with help from Sebastien Hinderer, review by Stephen Dola=
n=20
and David Allsopp)=20
- #9562, #367: Allow CSE of immutable loads across stores=20
(Stephen Dolan, review by Mark Shinwell)=20
- #9937: improvements in ARM64 code generation (constants, sign extensions)=
=20
(Xavier Leroy, review by Stephen Dolan)=20
- #10228: Better code-generation for inlined comparisons=20
(Stephen Dolan, review by Alain Frisch and Xavier Leroy)=20
- #10244: Optimise Int32.unsigned_to_int=20
(Fabian Hemmer, review by Stephen Dolan and Xavier Leroy)=20
- #10302, #10303: Fix incorrect instruction selection for string constant l=
oads=20
on ppc.=20
(David Allsopp, review by Stephen Dolan)=20
- #10349: Fix destroyed_at_c_call on RISC-V=20
(Mark Shinwell, review by Nicol=C3=A1s Ojeda B=C3=A4r)=20
- #10419: Add %frame_pointers primitive which is true only in native code w=
ith=20
frame pointers mode enabled.=20
(David Allsopp, review by Vincent Laviron and Mark Shinwell)=20
### Standard library:=20
- #9448: Add String.{empty,cat} as dual of Bytes.{empty,cat},=20
String.{of,to}_bytes as aliases of Bytes.{to,of}_string,=20
Bytes.split_on_char as dual of String.split_on_char, and binary decoding=20
functions in String to match those in Bytes.=20
(David Allsopp, review by Damien Doligez, Gabriel Scherer and others)=20
- #9487, #9489: Add Random.full_int which allows 62-bit bounds on 64-bit=20
systems.=20
(David Allsopp, request by Francois Berenger, review by Xavier Leroy and=20
Damien Doligez)=20
- #9961: Add Array.fold_left_map.=20
(Craig Ferguson, review by Damien Doligez)=20
- #10097: Lazy.map, Lazy.map_val: ('a -> 'b) -> 'a Lazy.t -> 'b Lazy.t=20
(map f x) is always (lazy (f (force x))), whereas (map_val f x)=20
applies f directly if x is already forced.=20
(Gabriel Scherer, review by Nicol=C3=A1s Ojeda B=C3=A4r, Alain Frisch, Xavi=
er Leroy,=20
Daniel B=C3=BCnzli and Stephen Dolan)=20
- #10242: Added convenience pretty printer for Either.t in the Format modul=
e.=20
(Oghenevwogaga Ebresafe, review by Nicol=C3=A1s Ojeda B=C3=A4r,=20
Gabriel Scherer and Xavier Van de Woestyne)=20
- #10352: Seq.(concat : 'a t t -> 'a t)=20
Seq.concat_map as an alias to Seq.flat_map,=20
(Gabriel Scherer, review by Ulugbek Abdullaev and Daniel B=C3=BCnzli=20
and Nicol=C3=A1s Ojeda B=C3=A4r and Florian Angeletti)=20
- #882: Add fold_left, fold_right, exists and for_all to String/Bytes=20
(Yotam Barnoy, review by Alain Frisch and Jeremy Yallop)=20
- #4070, #10398: small optimization of Stdlib.{frexp,modf}.=20
(Markus Mottl, Nicol=C3=A1s Ojeda B=C3=A4r, review by Gabriel Scherer)=20
- #10389, #10391, #10392: Add {Int,Int32,Int64,Nativeint}.{min,max}.=20
(Nicol=C3=A1s Ojeda B=C3=A4r and Alain Frisch, review by Xavier Leroy)=20
- #10430: Add Format.print_bytes and Format.pp_print_bytes.=20
(Gabriel Radanne, review by Gabriel Scherer and David Allsopp)=20
### Other libraries:=20
* #10084: Unix.open_process_args* functions now look up the program in the =
PATH.=20
This was already the case under Windows, but this is now also done under=20
Unix. Note that previously the program was interpreted relative to the curr=
ent=20
directory.=20
(Nicol=C3=A1s Ojeda B=C3=A4r, review by Gabriel Scherer and Xavier Leroy)=
=20
- #10047: Add `Unix.realpath`=20
(Daniel B=C3=BCnzli, review by David Allsopp, Josh Berdine and Gabriel Sche=
rer)=20
- #10184: Remove expensive debug assertion from dynlink.=20
(Leo White, review by David Allsopp and Xavier Leroy)=20
- #10185: Consider that IPv6 is always enabled on Windows.=20
(Antonin D=C3=A9cimo, review by David Allsopp and Xavier Leroy)=20
- #10306: Map WSA error code to Unix errno for sockopt and getsockname=20
functions (Antonin D=C3=A9cimo, review by David Allsopp)=20
- #10309: Properly return EBADF on error in Unix.descr_of_{in,out}_channel =
on=20
Win32 and map Windows error correctly in Unix.truncate and Unix.ftruncate o=
n=20
Win32.=20
(David Allsopp, review by Nicol=C3=A1s Ojeda B=C3=A4r)=20
### Tools:=20
- #10139: Adds a -nonavbar option to ocamldoc, to remove confusing=20
'Up', 'Previous' and 'Next' links=20
(John Whitington, review by David Allsopp)=20
- #8645, #10363: ocamldoc: escape `<`, `>`, and `&` in html backend.=20
(Florian Angeletti, report by Wim Lewis, review by Gabriel Scherer)=20
### Manual and documentation:=20
- #9525, #10402: document that ocamldoc only creates paragraphs=20
at the toplevel of documentation comments=20
(Florian Angeletti, report by Hendrik Tews, review by Gabriel Scherer)=20
- #10206: Split labels and polymorphic variants tutorials in two.=20
Moves the GADTs tutorial from the Language Extensions chapter=20
to the tutorials.=20
(John Whitington, review by Florian Angeletti and Xavier Leroy)=20
- #9786, #10181: improved documentation of Unix.{in,out}_channel_of_descr=
=20
with respect to closing.=20
(Xavier Leroy, report by Jacques-Henri Jourdan, review by Guillaume=20
Munch-Maccagnoni, Gabriel Scherer, Jacques-Henri Jourdan)=20
- #10139: Use the new -nonavbar option to improve navigation within=20
the reference manual stdlib documentation.=20
(John Whitington, review by David Allsopp)=20
- #1351: Document `-output-complete-obj` option in the manual.=20
(Fran=C3=A7ois Bobot, Nicol=C3=A1s Ojeda B=C3=A4r, review by Daniel B=C3=BC=
nzli and Damien=20
Doligez)=20
- #9632: Document incremental build solutions with opam=20
(Vincent Laviron, review by Daniel B=C3=BCnzli and Gabriel Scherer)=20
- #10497: Styling changes in the post-processed HTML manual (webman)=20
(Wiktor Kuchta, review by Florian Angeletti)=20
- #10605: manual, name few css classes to ease styling and maintainability.=
=20
(Florian Angeletti, review by Wiktor Kuchta and Gabriel Scherer)=20
### Compiler user-interface and warnings:=20
- #1737, #2092, #7852, #7859, #10405, #10417: Update locations during=20
destructive substitutions=20
(Thomas Refis, review by Gabriel Radanne, report by Hugo Heuzard)=20
- #2245: Improve error message for link order error in bytecode=20
(Pierre Chambart, review by J=C3=A9r=C3=A9mie Dimino and Gabriel Scherer)=
=20
- #8732, improved error messages for invalid private row type definitions.=
=20
For instance, [ type t =3D private [< `A > `A ] ] .=20
(Florian Angeletti, review by Jacques Garrigue, Thomas Refis,=20
and Gabriel Scherer)=20
- #9407: optional warning for missing mli interface file=20
(Anukriti Kumar, review by Florian Angeletti)=20
- #9960, #10619: extend ocamlc/ocamlopt's -o option to work when=20
compiling C files=20
(S=C3=A9bastien Hinderer, reported by Daniel B=C3=BCnzli, review by=20
Florian Angeletti and Gabriel Scherer)=20
- #10095: minor simplifications to some syntax error messages.=20
(Fran=C3=A7ois Pottier, review by Gabriel Scherer and Fr=C3=A9d=C3=A9ric Bo=
ur.)=20
- #10196, #10197: better error message on empty character literals ''.=20
(Gabriel Scherer, review by David Allsopp and Florian Angeletti=20
and Daniel B=C3=BCnzli, report by Robin Bj=C3=B6rklin)=20
- #8877: Call the linker when ocamlopt is invoked with .o and .a files only=
.=20
(Greta Yorsh, review by Leo White)=20
- #10207, #10312: deprecate consecutive letters in warning=20
specifications.=20
The form `-w aBcD` was equivalent to `-w -a+b-c+d`.=20
It is now deprecated to improve the coexistence with warning mnemonics.=20
However, using isolated single letter is not deprecated to allow the form=
=20
`-w "A-32..50-45"`.=20
(Florian Angeletti, review by Damien Doligez and Gabriel Scherer)=20
- #10232: Warning for unused record fields.=20
(Leo White, review by Florian Angeletti)=20
### Internal/compiler-libs changes:=20
- #9243, simplify parser rules for array indexing operations=20
(Florian Angeletti, review by Damien Doligez and Gabriel Scherer)=20
- #9650, #9651: keep refactoring the pattern-matching compiler=20
(Gabriel Scherer, review by Thomas Refis and Florian Angeletti)=20
- #9827: Replace references with functions arguments in Simplif=20
(Anukriti Kumar, review by Vincent Laviron and David Allsop)=20
- #10007: Driver.compile_common: when typing a .ml file, return the=20
compilation unit signature (inferred or from the .cmi) in addition=20
to the implementation and the coercion.=20
(Leandro Ostera, review by Gabriel Scherer and Thomas Refis)=20
- #10045: Add libext variable to ocamltest and enable C# tests on on mingw=
=20
(David Allsopp, review by Gabriel Scherer)=20
* #10061, #10078, #10187: remove library `ocamlopttoplevel`, remove modules=
=20
`Opttoploop`, `Opttopstart`, which are replaced by `Toploop` and `Topstart`=
in=20
library `ocamltoplevel`, made available in native code.=20
(Louis Gesbert, review by Jeremie Dimino, Mark Shinwell and Gabriel Radanne=
)=20
- #10124: remove duplicated code from the native toplevel, split toplevel=
=20
implementation into the shared part (`Topcommon`, etc.) and specific ones=
=20
(`Topeval`, `Trace`, `Topmain`).=20
(Louis Gesbert, review by Jeremie Dimino and Gabriel Radanne)=20
- #10086: add the commands `make list-parse-errors` and `make=20
generate-parse-errors` to generate a set of syntactically incorrect=20
sentences that covers all error states of the LR automaton. Add these=20
sentences to the test suite. This can be used to evaluate the quality of th=
e=20
parser's syntax error messages and (in the future) to evaluate the impact o=
f=20
changes in the parser.=20
(Fran=C3=A7ois Pottier, review by Gabriel Scherer and Xavier Leroy.)=20
- #10090: Distinguished constructors for ref variables at lambda level=20
(Keryan Didier, review by Gabriel Scherer and Vincent Laviron)=20
- #10113: add a `-timeout` option to ocamltest and use it in the test suite=
.=20
(Xavier Leroy and Gabriel Scherer, review by S=C3=A9bastien Hinderer=20
and David Allsopp)=20
* #10169, #10270, #10301, #10451: Use capitalized module names in the Stand=
ard=20
Library prefixing scheme to match Dune, e.g. Stdlib__String instead of=20
Stdlib__string. This is a breaking change only to code which attempted to u=
se=20
the internal names before. The Standard Library generated by the Dune rules=
is=20
now equivalent to the main build (the Dune rules still do not generate a=20
distributable compiler).=20
(David Allsopp and Mark Shinwell, review by Gabriel Scherer)=20
- #10327: Add a subdirectories variable and a copy action to ocamltest=20
(S=C3=A9bastien Hinderer, review by David Allsopp)=20
- #10358: Use a hash table for the load path.=20
(Leo White, review by Gabriel Scherer)=20
- #8936: Per-function environment for Emit=20
(Greta Yorsh, review by Vincent Laviron and Florian Angeletti)=20
- #10543: Fix Ast_mapper to apply the mapping function to the constants in=
=20
"interval" patterns `c1..c2`.=20
(Guillaume Petiot, review by Gabriel Scherer and Nicol=C3=A1s Ojeda B=C3=A4=
r)=20
### Internal typechecker changes:=20
- #10174: Make Tsubst more robust by avoiding strange workarounds=20
(Takafumi Saikawa and Jacques Garrigue, review by Gabriel Scherer and=20
Florian Angeletti)=20
- #10265: Move type_unboxed.unboxed into type_kind=20
(Stephen Dolan, review by Gabriel Scherer)=20
- #10307: Refactor type_description in the typing env=20
(Nicolas Chataing, review by Takafumi Saikawa, Florian Angeletti and Thomas=
=20
Refis)=20
- #10311: Separate the constraint-solving part of Typecore.type_pat into=20
specific solver functions.=20
(Jacques Garrigue and Takafumi Saikawa, review by Gabriel Scherer)=20
- #10428: Make build_other_constrs work with names instead of tags.=20
(Nicolas Chataing, review by Florian Angeletti)=20
### Build system:=20
- #10332, #10333: Generate lambda/runtimedef.ml correctly in Swedish locale=
.=20
(the letter 'w' is not included in '[a-z]' in sv_SE.UTF-8)=20
(David Allsopp, report by Anders Jackson, review by Florian Angeletti and=
=20
Gabriel Scherer)=20
- #10289, #10406: Do not print option documentation in usage messages.=20
(Pavlo Khrystenko, review by Gabriel Scherer, fix by Kate Deplaix)=20
- #9191, #10091, #10182: take the LDFLAGS variable into account, except on=
=20
flexlink-using systems.=20
(Gabriel Scherer, review by S=C3=A9bastien Hinderer and David Allsopp,=20
report by Ralph Seichter)=20
- #10135: Overhaul the FlexDLL bootstrap process. It's now fully integrated=
=20
with the default build target and controlled by --with-flexdll which allows=
=20
externally downloaded sources for FlexDLL to be specified. A separate=20
non-shared version of the runtime is built, and shared artefacts are no lon=
ger=20
built twice. When bootstrapping, any flexlink in PATH is now ignored and th=
e=20
Cygwin port also supports bootstrapping FlexDLL. flexlink.opt is automatica=
lly=20
built and installed as part of opt.opt/world.opt.=20
(David Allsopp, review by S=C3=A9bastien Hinderer)=20
- #10156: configure script: fix sockets feature detection.=20
(Lucas Pluvinage, review by David Allsopp and Damien Doligez)=20
- #10176, #10632: By default, call the assembler through the C compiler dri=
ver=20
(S=C3=A9bastien Hinderer, review by Gabriel Scherer, David Allsopp and Xavi=
er=20
Leroy)=20
- #10186: configure wasn't using library link flags when searching for=20
network functions on systems where they're not in libc. Fix IPv6 and=20
socklen_t detection on Windows.=20
(Antonin D=C3=A9cimo, review by David Allsopp and S=C3=A9bastien Hinderer)=
=20
- #10366: Make it possible to use the OCAMLRUN variable to specify=20
which runtime to use while building the compilers (S=C3=A9bastien Hinderer,=
=20
review by David Allsopp)=20
- #10451, #10635: Replace the use of iconv with a C utility to convert $(LI=
BDIR)=20
to a C string constant on Windows when building the runtime. Hardens the=20
generation of the constant on Unix for paths with backslashes, double-quote=
s=20
and newlines.=20
(David Allsopp, review by Florian Angeletti and S=C3=A9bastien Hinderer)=20
- #10471: Fix detection of arm32 architectures with musl in configure.=20
(Louis Gesbert, review by David Allsopp)=20
### Bug fixes:=20
- #6654, #9774, #10401: make `include` and with `constraints` handle correc=
tly=20
the ghost components of signatures. For instance, in=20
include struct class c =3D object end end type c=20
the type `c` shadows the `class c` to avoid shadowing only the ghost type=
=20
c introduced by the class.=20
(Florian Angeletti, report by Eduardo Rafael, review by Gabriel Scherer)=20
- #6985, #10385: remove all ghost row types from included modules=20
(Florian Angeletti, review by Gabriel Scherer)=20
- #7453, #9828, #10416: fix #show for recursive types and modules=20
(Florian Angeletti, review by Gabriel Scherer)=20
* #7469, #10408: Sys.time now returns processor time on Windows (previously=
=20
returned wall-clock time)=20
(David Allsopp, review by Nicol=C3=A1s Ojeda B=C3=A4r)=20
* #8857, #10220: Don't clobber GetLastError() in caml_leave_blocking_sectio=
n=20
when the systhreads library is loaded.=20
(David Allsopp, report by Anton Bachin, review by Xavier Leroy)=20
- #8575, #10362: Surprising interaction between polymorphic variants and=20
constructor disambiguation.=20
(Jacques Garrigue, report and review by Thomas Refis)=20
- #8917, #8929, #9889, #10219: fix printing of nested recursive definitions=
=20
in presence of a name collision.=20
(Florian Angeletti, report by Thomas Refis, review by Gabriel Scherer)=20
- #10005: Try expanding aliases in Ctype.nondep_type_rec=20
(Stephen Dolan, review by Gabriel Scherer, Leo White and Xavier Leroy)=20
- #10072, #10085: Check that sizes and offsets in stack frame descriptors=
=20
do not overflow the 16-bit fields where they are stored.=20
(Xavier Leroy, report by Github user pveber, review by Gabriel Scherer)=20
- #10087, #10138: In the toplevel REPL, don't use the cache=20
of included directories, so that files created or deleted while=20
the REPL is running are correctly handled.=20
(Xavier Leroy, report by Github user quakerquickoats, review by=20
Jeremie Dimino)=20
- #10294, #10295: fix an assert-failure in pattern-matching compilation=20
(Gabriel Scherer, review by Thomas Refis and Luc Maranget,=20
report by Nicol=C3=A1s Ojeda B=C3=A4r)=20
- #10147, #10148: Fix building runtime with GCC on macOS.=20
(David Allsopp, report by John Skaller)=20
- #10166: Fix illegal permutation error reporting in module aliases.=20
(Matthew Ryan, review by Florian Angeletti)=20
- #10189, #10190, #10347: Universal variables leaking through GADT equation=
s=20
(Jacques Garrigue, report and review by Leo White)=20
- #10205: Avoid overwriting closures while initialising recursive modules=
=20
(Stephen Dolan, review by Xavier Leroy, Hugo Heuzard and Vincent Laviron)=
=20
- #10253, #10373: tweak error message for unknown variant constructors=20
or record fields in type-directed disambiguation=20
(Florian Angeletti, report by Hongbo Zhang, review by Gabriel Scherer)=20
* #10277, #10383: Need to detect ambiguity recursively inside types to=20
guarantee principality (affects only principal mode)=20
(Jacques Garrigue, review by Thomas Refis, Leo White and Kate Deplaix)=20
- #10283, #10284: Enforce right-to-left evaluation order for Lstaticraise=
=20
(Vincent Laviron, report by Github user Ngoguey42, review by Gabriel Schere=
r)=20
- #10298, #10305: Incorrect propagation of type equalities in functor=20
application=20
(Jacques Garrigue, report and review by Didier Remy)=20
- #10324, #10325: Prevent generation of Lsend(Cached, _) in bytecode=20
(Vincent Laviron, report by Yawar Amin and Nicol=C3=A1s Ojeda B=C3=A4r, rev=
iew by=20
Jacques Garrigue)=20
- #10338, #10340: Translcore.push_defaults does not respect scoping=20
(Jacques Garrigue, report and review by Stephen Dolan)=20
- #10351: Fix DLL loading with binutils 2.36+ on mingw-w64=20
(David Allsopp, review by Nicol=C3=A1s Ojeda B=C3=A4r)=20
- #10339, #10354, #10387: Fix handling of exception-raising specific=20
operations during spilling and liveness analysis.=20
(This bug affects ARM and ARM64.)=20
In passing, refactor Proc.op_is_pure and Mach.operation_can_raise.=20
(Xavier Leroy, report by Richard Bornat, review by Stephen Dolan=20
and Mark Shinwell)=20
- #10371: no longer generatd useless `.cds` file when using=20
`-output-complete-exe`.=20
(Nicol=C3=A1s Ojeda B=C3=A4r, review by David Allsopp)=20
- #10376: Link runtime libraries correctly on msvc64 in -output-complete-ob=
j=20
(David Allsopp, review by Gabriel Scherer)=20
- #10380: Correct handling of UTF-8 paths in configure on Windows=20
(David Allsopp, review by S=C3=A9bastien Hinderer)=20
- #10450, #10558: keep %apply and %revapply primitives working with abstrac=
t=20
types. This breach of backward compatibility was only present in the alpha=
=20
releases of OCaml 4.13.0 .=20
(Florian Angeletti, review by Thomas Refis and Leo White)=20
- #10454: Check row_more in nondep_type_rec.=20
(Leo White, review by Thomas Refis)=20
- #10468: Correctly pretty print local type substitution, e.g. type t :=3D =
...,=20
with -dsource=20
(Matt Else, review by Florian Angeletti)=20
- #10461, #10498: `caml_send*` helper functions take derived pointers=20
as arguments. Those must be declared with type Addr instead of Val.=20
Moreover, poll point insertion must be disabled for `caml_send*`,=20
otherwise the derived pointer is live across a poll point.=20
(Vincent Laviron and Xavier Leroy, review by Xavier Leroy and Sadiq Jaffer)=
=20
- #10511: Cygwin ports now correctly configure when flexdll is not availabl=
e.=20
(David Allsopp, review by Florian Angeletti)=20
- #10550, #10551: fix pretty-print of gadt-pattern-with-type-vars=20
(Chet Murthy, review by Gabriel Scherer)=20
- #10584, #10856: Standard Library documentation build no longer fails if=
=20
optional libraries have been disabled.=20
(David Allsopp, report by Yuri Victorovich review by Florian Angeletti)=20
- #10593: Fix untyping of patterns without named existential quantifiers. T=
his=20
bug was only present in the beta version of OCaml 4.13.0.=20
(Ulysse G=C3=A9rard, review by Florian Angeletti)=20
- #10603, #10611: Fix if condition marked as inconstant in flambda=20
(Vincent Laviron and Pierre Chambart, report by Marcello Seri)=20
--=_ce9e6cc3-57b0-4aff-be59-fbf0570f4b8c
Content-Type: text/html; charset=utf-8
Content-Transfer-Encoding: quoted-printable
<html><body><div style=3D"font-family: arial, helvetica, sans-serif; font-s=
ize: 12pt; color: #000000"><div><div>Dear OCaml users,<br><br>We have the p=
leasure of celebrating the 175th anniversary of the discovery of Neptune<br=
>by announcing the joint releases of OCaml version 4.13.0 and 4.12.1.<br><b=
r>Some of the highlights in the 4.13.0 release are:<br><br>- Safe points: a=
multicore prerequisite that ensures that ocamlopt-generated code can alway=
s be interrupted.<br>- The best-fit GC allocation policy is now the default=
policy (and many other GC improvements).<br>- Named existential type varia=
bles in pattern matching: `Showable (type a) (x, show : a * (a -> string=
))`.<br><br>- Improved error messages for functor application and functor t=
ypes.<br>- Let-punning for monadic let: `let* x =3D x in` can be shortened =
to `let* x in`.<br>- Module type substitutions `SIG with module type T =3D =
F(X).S`.<br><br>- Many other quality of life improvements<br>- Many bug fix=
es<br><br>The 4.12.1 release is a collection of safe bug fixes, cherry-pick=
ed from the 4.13.0 development<br>cycle. If you were using OCaml 4.12.0 and=
cannot yet upgrade to 4.13.0, this release is for you.<br><br>The full lis=
t of changes can be found in the changelogs below.<br><br>Those releases ar=
e available as OPAM switches, and as a source download here:<br><br> =
https://github.com/ocaml/ocaml/archive/4.13.0.tar.gz<br> https://caml=
.inria.fr/pub/distrib/ocaml-4.13/<br><br>and there:<br><br> https://g=
ithub.com/ocaml/ocaml/archive/4.12.1.tar.gz<br> https://caml.inria.fr=
/pub/distrib/ocaml-4.12/<br><br><br>Happy hacking,<br><br>-- Florian Angele=
tti for the OCaml team.<br><br><br>OCaml 4.12.1 (24 September 2021)<br>----=
--------------------------------------------<br><br>### Bug fixes:<br><br>-=
#10107: Ensure modules compiled with -afl-instrument can still link on<br>=
platforms without AFL support.<br> (David Allsopp, review by X=
avier Leroy)<br><br>- #10294, #10295: fix an assert-failure in pattern-matc=
hing compilation<br> (Gabriel Scherer, review by Thomas Refis and Luc=
Maranget,<br> report by Nicol=C3=A1s Ojeda B=C3=A4r)<br><br>- =
#10310: configure's --enable-spacetime option now causes an error rather th=
an<br> being silently ignored.<br> (David Allsopp, review by Ga=
briel Scherer)<br><br>- #10351: Fix DLL loading with binutils 2.36+ on ming=
w-w64<br> (David Allsopp, review by Nicol=C3=A1s Ojeda B=C3=A4r)<br><=
br>- #10442, #10446: Fix regression in the toplevel to #directory caused by=
<br> corrections and improvements to the Load_path in #9611. #directo=
ry now<br> adds the path to the start of the load path again (so file=
s in the newly<br> added directory take priority).<br> (David A=
llsopp, report by Vasile Rotaru, review by Florian Angeletti<br>  =
; and Nicol=C3=A1s Ojeda B=C3=A4r)<br><br>- #10449: Fix major GC work accou=
nting (the GC was running too fast).<br> (Damien Doligez, report by S=
tephen Dolan, review by Nicol=C3=A1s Ojeda B=C3=A4r<br> and Sad=
iq Jaffer)<br><br>- #10478: Fix segfault under Windows due to a mistaken in=
itialization of thread<br> ID when a thread starts.<br> (David =
Allsopp, Nicol=C3=A1s Ojeda B=C3=A4r, review by Xavier Leroy)<br><br>- #106=
26, #10628: Wrong reloading of the x86-64 instruction for<br> integer=
multiplication by a constant, causing the assembler to<br> reject th=
e ocamlopt-generated code.<br> (Xavier Leroy, report by Dave Aitken, =
review by Vincent Laviron)<br><br><br>OCaml 4.13.0 (24 September 2021)<br>-=
-----------------------------------------------<br><br>### Progress towards=
Multicore:<br><br>- #10039: Safepoints<br> Add poll points to native=
generated code. These are effectively<br> zero-sized allocations and=
fix some signal and remembered set<br> issues. Also multicore prereq=
uisite.<br> (Sadiq Jaffer, Stephen Dolan, Damien Doligez, Xavier Lero=
y,<br> Anmol Sahoo, Mark Shinwell, review by Damien Doligez, Xa=
vier Leroy,<br> and Mark Shinwell)<br><br>- #9876: do not cache=
the young_limit GC variable in a processor register.<br> This affect=
s the ARM64, PowerPC and RISC-V ports, making signal handling<br> and=
minor GC triggers more reliable, at the cost of a small slowdown.<br> =
; (Xavier Leroy, review by Nicol=C3=A1s Ojeda B=C3=A4r)<br><br>### Language=
features (highlights):<br><br>- #9584, #7074: Allow to name existentials i=
n pattern-matching<br> One can now write '(Cstr (type a) (x, y : int =
* a))' to give a name to<br> existentials freshly introduced by GADT =
constructors.<br> (Jacques Garrigue, review by Leo White and Gabriel =
Scherer)<br><br>### Compiler user-interface and warnings (highlights):<br><=
br>- #9331: Improve error messages for functor application and functor type=
s.<br> (Florian Angeletti and Gabriel Radanne, review by Leo White)<b=
r><br>* #10118, #10140: enable warning 6 [labels-omitted] by default.<br>&n=
bsp; The following now warns:<br> let f ~x y =3D ... in f=
3 5<br> the callsite (f 3 5) has to be turned into (f ~x:3 5).<br>&n=
bsp; This prevents mistakes where two arguments of the same types are swapp=
ed.<br> (Note: Dune already enables this warning by default.)<br>&nbs=
p; (Gabriel Scherer, review by Xavier Leroy and Florian Angeletti,<br> =
; report by ygrek)<br><br>### Manual and documentation (highlights):<=
br><br>- #10247: Add initial tranche of examples to reference manual.<br>&n=
bsp; Adds some eighty examples to the reference manual, principally to the<=
br> expressions and patterns sections.<br> https://ocaml.org/re=
leases/4.13/manual/patterns.html<br> (John Whitington, review by Xavi=
er Leroy, Gabriel Scherer, @Fourchaux, and<br> Florian Angeletti)<br>=
<br>- #9987, #9988, #9996, #9997: add an odoc mode for the documentation<br=
> of the standard library and compiler library<br> (Florian Ang=
eletti, review by David Allsopp, S=C3=A9bastien Hinderer,<br> a=
nd Gabriel Scherer)<br><br>### Standard library (highlights):<br><br>- #944=
: Add some missing C99 float operations. `Stdlib` now contains<br>&nb=
sp; the inverse hyperbolic functions<br> `acosh`, `asinh`=
, and `atanh`.<br> These functions were also added to module `Stdlib.=
Float` together with<br> `exp2`, `log2`, `cbrt`, `erf`, a=
nd `erfc`.<br> Full support on MSVC requires VS2013+ but emulated ver=
sions are<br> still available (for now) for older compilers.<br> =
; (Markus Mottl, review by David Allsopp, Olivier Andrieu, Florian Angelett=
i,<br> Nicol=C3=A1s Ojeda B=C3=A4r, Daniel B=C3=BCnzli, Fabian @copy,=
Pascal Cuoq, Damien<br> Doligez, S=C3=A9bastien Hinderer, Jacques-He=
nri Jourdan, Xavier Leroy, Guillaume<br> Melquiond, Perry E. Metzger,=
Runhang Li, Gabriel Scherer, Mark Shinwell,<br> Bernhard Schommer an=
d Christophe Troestler)<br><br>- #9582: Add Array.{find_opt,find_map,split,=
combine}.<br> (Nicol=C3=A1s Ojeda B=C3=A4r, review by Daniel B=C3=BCn=
zli and Gabriel Scherer)<br><br>- #9533: Added String.starts_with and Strin=
g.ends_with.<br> (Bernhard Schommer, review by Daniel B=C3=BCnzli, Ga=
briel Scherer and<br> Alain Frisch)<br><br>### Code generation and op=
timizations (highlights):<br><br>- #10404: Add a generic backward dataflow =
analyzer and use it to speed up<br> liveness analysis<br> (Xavi=
er Leroy, review by Gabriel Scherer, Greta Yorsh, Mark Shinwell)<br><br>- #=
10414: Avoid compilation times exponential in the nesting of loops<br> =
; in the spilling and reloading passes<br> (Xavier Leroy, review by V=
incent Laviron)<br><br>### Internal typechecker changes (highlights):<br><b=
r>- #10170: Maintain more structural information in type-checking errors<br=
> A mostly-internal change that preserves more information in errors<=
br> during type checking; most significantly, it split the errors fro=
m<br> unification, moregen, and type equality into three different ty=
pes.<br> (Antal Spector-Zabusky and Mekhrubon Tuarev, review by Leo W=
hite,<br> Florian Angeletti, and Jacques Garrigue)<br><br>- #9994: Ma=
ke Types.type_expr a private type, and abstract marking mechanism<br> =
(Jacques Garrigue and Takafumi Saikawa,<br> review by Gabriel =
Scherer and Leo White)<br><br>### Runtime system (highlights):<br><br>- #10=
188, #10213: Switch the default allocation policy to best-fit and adjust<br=
> the default overhead parameter accordingly.<br> (Damien Dolig=
ez, review by Josh Berdine and Xavier Leroy)<br><br>- #10549: Stack overflo=
w detection and naked pointers checking for ARM64<br> (Xavier Leroy, =
review by Stephen Dolan)<br><br>- #9934: Optimise sweeping using prefetchin=
g.<br> (Stephen Dolan and Will Hasenplaugh, review by David Allsopp, =
Xavier<br> Leroy and Damien Doligez, benchmarking by Shubham Ku=
mar and KC<br> Sivaramakrishnan)<br><br>- #10194: Change compac=
tion-triggering heuristic: use the overhead measured<br> by the previ=
ous GC cycle instead of an indirect (and noisy) computation<br> of th=
e current overhead.<br> (Damien Doligez, review by Stephen Dolan)<br>=
<br>- #10449: Fix major GC work accounting (the GC was running too fast).<b=
r> (Damien Doligez, report by Stephen Dolan, review by Nicol=C3=A1s O=
jeda B=C3=A4r and<br> Sadiq Jaffer)<br><br><br>### Language fea=
tures:<br><br>- #10013: Let-punning<br> Allow 'let* x in ...' and 'le=
t%ext x in ...' as shorthand for<br> 'let* x =3D x in ...=
' and 'let%ext x =3D x in ...' respectively.<br> (Stephen Dolan, revi=
ew by Gabriel Scherer)<br><br>- #10133: module type substitutions<br> =
Allow 'SIG with module type T =3D F(X).S', 'SIG with module type T :=3D si=
g end'<br> and their local equivalent `module type T :=3D sig type u =
end`<br> (Florian Angeletti, review by Gabriel Radanne and Leo White)=
<br><br>### Type system:<br><br>* #10081: Typecheck `x |> f` and `f @@ x=
` as `(f x)`<br> (Alain Frisch, review by Jacques Garrigue, Josh Berd=
ine and Thomas Refis)<br><br>### Runtime system:<br><br>- #10318: Windows U=
nicode runtime functions are no longer marked as<br> experimental.<br=
> (Nicol=C3=A1s Ojeda B=C3=A4r, review by David Allsopp)<br><br>- #92=
84: Add -config option to display the configuration of ocamlrun on stdout,<=
br> including the search path for shared stub libraries.<br> (D=
avid Allsopp, review by Xavier Leroy)<br><br>- #9919: Introduce caml_record=
_backtraces and update Interfacing with C to<br> refer to it (previou=
s instruction to use caml_record_backtrace primitive was<br> not poss=
ible without defining CAML_INTERNALS)<br> (David Allsopp, review by X=
avier Leroy)<br><br>- #10102: Ignore PROFINFO_WIDTH if WITH_PROFINFO is not=
defined (technically<br> a breaking change if the configuration syst=
em was being abused before).<br> (David Allsopp, review by Xavier Ler=
oy)<br><br>- #10107: Ensure modules compiled with -afl-instrument can still=
link on<br> platforms without AFL support.<br> (David Allsopp,=
review by Xavier Leroy)<br><br>* #10098: Improve command-line parsing in o=
camlrun: strictly recognise options,<br> be more informative for `oca=
mlrun -I` and support `--` for terminating options<br> parsing.<br>&n=
bsp; (David Allsopp, review by Xavier Leroy)<br><br>- #10101: Add -help/--h=
elp option to ocamlrun.<br> (David Allsopp, review by Xavier Leroy)<b=
r><br>- #10136: Minor clean-ups in runtime/io.c and runtime/caml/io.h<br>&n=
bsp; (Xavier Leroy, review by David Allsopp and Guillaume Munch-Maccagnoni)=
<br><br>- #10171: Tweak the naked pointers checker so that processes which =
trigger the<br> alarm always exit with non-zero status (i.e. exit(0) =
becomes exit(70)).<br> (David Allsopp, review by Xavier Leroy)<br><br=
>- #10212: Simplify and improve the Windows-specific code that connects<br>=
to the debugger via a socket.<br> (Antonin D=C3=A9cimo, review=
by Xavier Leroy)<br><br>- #10217: Fix a segfault in a corner case of compa=
ction (reported in #9853)<br> (Damien Doligez, report by Sadiq Jaffer=
, review by Stephen Dolan)<br><br>- #10250, #10266: Dynamically allocate al=
ternate signal stacks to<br> accommodate changes in Glibc 2.34.=
<br> (Xavier Leroy, reports by Tomasz K=C5=82oczko and R.W.M. Jones, =
review by Anil<br> Madhavapeddy, Stephen Dolan, and Florian Ang=
eletti)<br><br>### Code generation and optimizations:<br><br>- #1400: Add a=
n optional invariants check on Cmm, which can be activated<br> with t=
he -dcmm-invariants flag<br> (Vincent Laviron, with help from Sebasti=
en Hinderer, review by Stephen Dolan<br> and David Allsopp)<br>=
<br>- #9562, #367: Allow CSE of immutable loads across stores<br> (St=
ephen Dolan, review by Mark Shinwell)<br><br>- #9937: improvements in ARM64=
code generation (constants, sign extensions)<br> (Xavier Leroy, revi=
ew by Stephen Dolan)<br><br>- #10228: Better code-generation for inlined co=
mparisons<br> (Stephen Dolan, review by Alain Frisch and Xavier Leroy=
)<br><br>- #10244: Optimise Int32.unsigned_to_int<br> (Fabian Hemmer,=
review by Stephen Dolan and Xavier Leroy)<br><br>- #10302, #10303: Fix inc=
orrect instruction selection for string constant loads<br> on ppc.<br=
> (David Allsopp, review by Stephen Dolan)<br><br>- #10349: Fix destr=
oyed_at_c_call on RISC-V<br> (Mark Shinwell, review by Nicol=C3=A1s O=
jeda B=C3=A4r)<br><br>- #10419: Add %frame_pointers primitive which is true=
only in native code with<br> frame pointers mode enabled.<br> =
(David Allsopp, review by Vincent Laviron and Mark Shinwell)<br><br>### Sta=
ndard library:<br><br>- #9448: Add String.{empty,cat} as dual of Bytes.{emp=
ty,cat},<br> String.{of,to}_bytes as aliases of Bytes.{to,of}_string,=
<br> Bytes.split_on_char as dual of String.split_on_char, and binary =
decoding<br> functions in String to match those in Bytes.<br> (=
David Allsopp, review by Damien Doligez, Gabriel Scherer and others)<br><br=
>- #9487, #9489: Add Random.full_int which allows 62-bit bounds on 64-bit<b=
r> systems.<br> (David Allsopp, request by Francois Berenger, r=
eview by Xavier Leroy and<br> Damien Doligez)<br><br>- #9961: A=
dd Array.fold_left_map.<br> (Craig Ferguson, review by Damien Doligez=
)<br><br>- #10097: Lazy.map, Lazy.map_val: ('a -> 'b) -> 'a Lazy.t -&=
gt; 'b Lazy.t<br> (map f x) is always (lazy (f (force x))), whereas (=
map_val f x)<br> applies f directly if x is already forced.<br> =
(Gabriel Scherer, review by Nicol=C3=A1s Ojeda B=C3=A4r, Alain Frisch, Xav=
ier Leroy,<br> Daniel B=C3=BCnzli and Stephen Dolan)<br><br>- #=
10242: Added convenience pretty printer for Either.t in the Format module.<=
br> (Oghenevwogaga Ebresafe, review by Nicol=C3=A1s Ojeda B=C3=A4r,<b=
r> Gabriel Scherer and Xavier Van de Woestyne)<br><br>- #10352: Seq.(=
concat : 'a t t -> 'a t)<br> Seq.concat_map as an alias to Seq.fla=
t_map,<br> (Gabriel Scherer, review by Ulugbek Abdullaev and Daniel B=
=C3=BCnzli<br> and Nicol=C3=A1s Ojeda B=C3=A4r and Florian Ange=
letti)<br><br>- #882: Add fold_left, fold_right, exists and for_all to Stri=
ng/Bytes<br> (Yotam Barnoy, review by Alain Frisch and Jeremy Yallop)=
<br><br>- #4070, #10398: small optimization of Stdlib.{frexp,modf}.<br>&nbs=
p; (Markus Mottl, Nicol=C3=A1s Ojeda B=C3=A4r, review by Gabriel Scherer)<b=
r><br>- #10389, #10391, #10392: Add {Int,Int32,Int64,Nativeint}.{min,max}.<=
br> (Nicol=C3=A1s Ojeda B=C3=A4r and Alain Frisch, review by Xavier L=
eroy)<br><br>- #10430: Add Format.print_bytes and Format.pp_print_bytes.<br=
> (Gabriel Radanne, review by Gabriel Scherer and David Allsopp)<br><=
br>### Other libraries:<br><br>* #10084: Unix.open_process_args* functions =
now look up the program in the PATH.<br> This was already the case un=
der Windows, but this is now also done under<br> Unix. Note that prev=
iously the program was interpreted relative to the current<br> direct=
ory.<br> (Nicol=C3=A1s Ojeda B=C3=A4r, review by Gabriel Scherer and =
Xavier Leroy)<br><br>- #10047: Add `Unix.realpath`<br> (Daniel B=C3=
=BCnzli, review by David Allsopp, Josh Berdine and Gabriel Scherer)<br><br>=
- #10184: Remove expensive debug assertion from dynlink.<br> (Leo Whi=
te, review by David Allsopp and Xavier Leroy)<br><br>- #10185: Consider tha=
t IPv6 is always enabled on Windows.<br> (Antonin D=C3=A9cimo, review=
by David Allsopp and Xavier Leroy)<br><br>- #10306: Map WSA error code to =
Unix errno for sockopt and getsockname<br> functions (Antonin D=C3=A9=
cimo, review by David Allsopp)<br><br>- #10309: Properly return EBADF on er=
ror in Unix.descr_of_{in,out}_channel on<br> Win32 and map Windows er=
ror correctly in Unix.truncate and Unix.ftruncate on<br> Win32.<br>&n=
bsp; (David Allsopp, review by Nicol=C3=A1s Ojeda B=C3=A4r)<br><br>### Tool=
s:<br><br>- #10139: Adds a -nonavbar option to ocamldoc, to remove confusin=
g<br> 'Up', 'Previous' and 'Next' links<br> (John Whitington, r=
eview by David Allsopp)<br><br>- #8645, #10363: ocamldoc: escape `<`, `&=
gt;`, and `&` in html backend.<br> (Florian Angeletti, report by =
Wim Lewis, review by Gabriel Scherer)<br><br>### Manual and documentation:<=
br><br>- #9525, #10402: document that ocamldoc only creates paragraphs<br>&=
nbsp; at the toplevel of documentation comments<br> (Florian Angelett=
i, report by Hendrik Tews, review by Gabriel Scherer)<br><br>- #10206: Spli=
t labels and polymorphic variants tutorials in two.<br> Moves the GAD=
Ts tutorial from the Language Extensions chapter<br> to the tutorials=
.<br> (John Whitington, review by Florian Angeletti and Xavier Leroy)=
<br><br>- #9786, #10181: improved documentation of Unix.{in,out}_channel_of=
_descr<br> with respect to closing.<br> (Xavier Leroy, report b=
y Jacques-Henri Jourdan, review by Guillaume<br> Munch-Maccagno=
ni, Gabriel Scherer, Jacques-Henri Jourdan)<br><br>- #10139: Use the new -n=
onavbar option to improve navigation within<br> the reference manual =
stdlib documentation.<br> (John Whitington, review by David Allsopp)<=
br><br>- #1351: Document `-output-complete-obj` option in the manual.<br>&n=
bsp; (Fran=C3=A7ois Bobot, Nicol=C3=A1s Ojeda B=C3=A4r, review by Daniel B=
=C3=BCnzli and Damien<br> Doligez)<br><br>- #9632: Document increment=
al build solutions with opam<br> (Vincent Laviron, review by Daniel B=
=C3=BCnzli and Gabriel Scherer)<br><br>- #10497: Styling changes in the pos=
t-processed HTML manual (webman)<br> (Wiktor Kuchta, review by Floria=
n Angeletti)<br><br>- #10605: manual, name few css classes to ease styling =
and maintainability.<br> (Florian Angeletti, review by Wiktor Kuchta =
and Gabriel Scherer)<br><br>### Compiler user-interface and warnings:<br><b=
r>- #1737, #2092, #7852, #7859, #10405, #10417: Update locations during<br>=
destructive substitutions<br> (Thomas Refis, review by Gabriel=
Radanne, report by Hugo Heuzard)<br><br>- #2245: Improve error message for=
link order error in bytecode<br> (Pierre Chambart, review by J=C3=A9=
r=C3=A9mie Dimino and Gabriel Scherer)<br><br>- #8732, improved error messa=
ges for invalid private row type definitions.<br> For instance, [ typ=
e t =3D private [< `A > `A ] ] .<br> (Florian Angeletti, review=
by Jacques Garrigue, Thomas Refis,<br> and Gabriel Scherer)<br=
><br>- #9407: optional warning for missing mli interface file<br> (An=
ukriti Kumar, review by Florian Angeletti)<br><br>- #9960, #10619: extend o=
camlc/ocamlopt's -o option to work when<br> compiling C files<br>&nbs=
p; (S=C3=A9bastien Hinderer, reported by Daniel B=C3=BCnzli, review by<br>&=
nbsp; Florian Angeletti and Gabriel Scherer)<br><br>- #10095: minor simplif=
ications to some syntax error messages.<br> (Fran=C3=A7ois Pottier, r=
eview by Gabriel Scherer and Fr=C3=A9d=C3=A9ric Bour.)<br><br>- #10196, #10=
197: better error message on empty character literals ''.<br> (Gabrie=
l Scherer, review by David Allsopp and Florian Angeletti<br> an=
d Daniel B=C3=BCnzli, report by Robin Bj=C3=B6rklin)<br><br>- #8877: Call t=
he linker when ocamlopt is invoked with .o and .a files only.<br> (Gr=
eta Yorsh, review by Leo White)<br><br>- #10207, #10312: deprecate consecut=
ive letters in warning<br> specifications.<br> The form `-w aBc=
D` was equivalent to `-w -a+b-c+d`.<br> It is now deprecated to impro=
ve the coexistence with warning mnemonics.<br> However, using isolate=
d single letter is not deprecated to allow the form<br> `-w "A-32..50=
-45"`.<br> (Florian Angeletti, review by Damien Doligez and Gabriel S=
cherer)<br><br>- #10232: Warning for unused record fields.<br> (Leo W=
hite, review by Florian Angeletti)<br><br>### Internal/compiler-libs change=
s:<br><br>- #9243, simplify parser rules for array indexing operations<br>&=
nbsp; (Florian Angeletti, review by Damien Doligez and Gabriel Scherer)<br>=
<br>- #9650, #9651: keep refactoring the pattern-matching compiler<br> =
; (Gabriel Scherer, review by Thomas Refis and Florian Angeletti)<br><br>- =
#9827: Replace references with functions arguments in Simplif<br> (An=
ukriti Kumar, review by Vincent Laviron and David Allsop)<br><br>- #10007: =
Driver.compile_common: when typing a .ml file, return the<br> compila=
tion unit signature (inferred or from the .cmi) in addition<br> to th=
e implementation and the coercion.<br> (Leandro Ostera, review by Gab=
riel Scherer and Thomas Refis)<br><br>- #10045: Add libext variable to ocam=
ltest and enable C# tests on on mingw<br> (David Allsopp, review by G=
abriel Scherer)<br><br>* #10061, #10078, #10187: remove library `ocamloptto=
plevel`, remove modules<br> `Opttoploop`, `Opttopstart`, which are re=
placed by `Toploop` and `Topstart` in<br> library `ocamltoplevel`, ma=
de available in native code.<br> (Louis Gesbert, review by Jeremie Di=
mino, Mark Shinwell and Gabriel Radanne)<br><br>- #10124: remove duplicated=
code from the native toplevel, split toplevel<br> implementation int=
o the shared part (`Topcommon`, etc.) and specific ones<br> (`Topeval=
`, `Trace`, `Topmain`).<br> (Louis Gesbert, review by Jeremie Dimino =
and Gabriel Radanne)<br><br>- #10086: add the commands `make list-parse-err=
ors` and `make<br> generate-parse-errors` to generate a set of syntac=
tically incorrect<br> sentences that covers all error states of the L=
R automaton. Add these<br> sentences to the test suite. This can be u=
sed to evaluate the quality of the<br> parser's syntax error messages=
and (in the future) to evaluate the impact of<br> changes in the par=
ser.<br> (Fran=C3=A7ois Pottier, review by Gabriel Scherer and Xavier=
Leroy.)<br><br>- #10090: Distinguished constructors for ref variables at l=
ambda level<br> (Keryan Didier, review by Gabriel Scherer and Vincent=
Laviron)<br><br>- #10113: add a `-timeout` option to ocamltest and use it =
in the test suite.<br> (Xavier Leroy and Gabriel Scherer, review by S=
=C3=A9bastien Hinderer<br> and David Allsopp)<br><br>* #10169, =
#10270, #10301, #10451: Use capitalized module names in the Standard<br>&nb=
sp; Library prefixing scheme to match Dune, e.g. Stdlib__String instead of<=
br> Stdlib__string. This is a breaking change only to code which atte=
mpted to use<br> the internal names before. The Standard Library gene=
rated by the Dune rules is<br> now equivalent to the main build (the =
Dune rules still do not generate a<br> distributable compiler).<br>&n=
bsp; (David Allsopp and Mark Shinwell, review by Gabriel Scherer)<br><br>- =
#10327: Add a subdirectories variable and a copy action to ocamltest<br>&nb=
sp; (S=C3=A9bastien Hinderer, review by David Allsopp)<br><br>- #10358: Use=
a hash table for the load path.<br> (Leo White, review by Gabriel Sc=
herer)<br><br>- #8936: Per-function environment for Emit<br> (Greta Y=
orsh, review by Vincent Laviron and Florian Angeletti)<br><br>- #10543: Fix=
Ast_mapper to apply the mapping function to the constants in<br> "in=
terval" patterns `c1..c2`.<br> (Guillaume Petiot, review by Gabriel S=
cherer and Nicol=C3=A1s Ojeda B=C3=A4r)<br><br>### Internal typechecker cha=
nges:<br><br>- #10174: Make Tsubst more robust by avoiding strange workarou=
nds<br> (Takafumi Saikawa and Jacques Garrigue, review by Gabriel Sch=
erer and<br> Florian Angeletti)<br><br>- #10265: Move type_unbo=
xed.unboxed into type_kind<br> (Stephen Dolan, review by Gabriel Sche=
rer)<br><br>- #10307: Refactor type_description in the typing env<br> =
(Nicolas Chataing, review by Takafumi Saikawa, Florian Angeletti and Thoma=
s<br> Refis)<br><br>- #10311: Separate the constraint-solving p=
art of Typecore.type_pat into<br> specific solver functions.<br> =
; (Jacques Garrigue and Takafumi Saikawa, review by Gabriel Scherer)<br><br=
>- #10428: Make build_other_constrs work with names instead of tags.<br>&nb=
sp; (Nicolas Chataing, review by Florian Angeletti)<br><br>### Build system=
:<br><br>- #10332, #10333: Generate lambda/runtimedef.ml correctly in Swedi=
sh locale.<br> (the letter 'w' is not included in '[a-z]' in sv_SE.UT=
F-8)<br> (David Allsopp, report by Anders Jackson, review by Florian =
Angeletti and<br> Gabriel Scherer)<br><br>- #10289, #10406: Do =
not print option documentation in usage messages.<br> (Pa=
vlo Khrystenko, review by Gabriel Scherer, fix by Kate Deplaix)<br><br>- #9=
191, #10091, #10182: take the LDFLAGS variable into account, except on<br>&=
nbsp; flexlink-using systems.<br> (Gabriel Scherer, review by S=C3=A9=
bastien Hinderer and David Allsopp,<br> report by Ralph Seichte=
r)<br><br>- #10135: Overhaul the FlexDLL bootstrap process. It's now fully =
integrated<br> with the default build target and controlled by --with=
-flexdll which allows<br> externally downloaded sources for FlexDLL t=
o be specified. A separate<br> non-shared version of the runtime is b=
uilt, and shared artefacts are no longer<br> built twice. When bootst=
rapping, any flexlink in PATH is now ignored and the<br> Cygwin port =
also supports bootstrapping FlexDLL. flexlink.opt is automatically<br> =
; built and installed as part of opt.opt/world.opt.<br> (David Allsop=
p, review by S=C3=A9bastien Hinderer)<br><br>- #10156: configure script: fi=
x sockets feature detection.<br> (Lucas Pluvinage, review by David Al=
lsopp and Damien Doligez)<br><br>- #10176, #10632: By default, call the ass=
embler through the C compiler driver<br> (S=C3=A9bastien Hinderer, re=
view by Gabriel Scherer, David Allsopp and Xavier<br> Leroy)<br><br>-=
#10186: configure wasn't using library link flags when searching for<br>&n=
bsp; network functions on systems where they're not in libc. Fix IPv6 and<b=
r> socklen_t detection on Windows.<br> (Antonin D=C3=A9cimo, re=
view by David Allsopp and S=C3=A9bastien Hinderer)<br><br>- #10366: Make it=
possible to use the OCAMLRUN variable to specify<br> which runtime t=
o use while building the compilers (S=C3=A9bastien Hinderer,<br> revi=
ew by David Allsopp)<br><br>- #10451, #10635: Replace the use of iconv with=
a C utility to convert $(LIBDIR)<br> to a C string constant on Windo=
ws when building the runtime. Hardens the<br> generation of the const=
ant on Unix for paths with backslashes, double-quotes<br> and newline=
s.<br> (David Allsopp, review by Florian Angeletti and S=C3=A9bastien=
Hinderer)<br><br>- #10471: Fix detection of arm32 architectures with musl =
in configure.<br> (Louis Gesbert, review by David Allsopp)<br><br>###=
Bug fixes:<br><br>- #6654, #9774, #10401: make `include` and with `constra=
ints` handle correctly<br> the ghost components of signatures. For in=
stance, in<br><br> include struct class c =3D object end =
end type c<br><br> the type `c` shadows the `class c` to avoid =
shadowing only the ghost type<br> c introduced by the class.<br=
> (Florian Angeletti, report by Eduardo Rafael, review by Gabriel Sch=
erer)<br><br>- #6985, #10385: remove all ghost row types from included modu=
les<br> (Florian Angeletti, review by Gabriel Scherer)<br><br>- #7453=
, #9828, #10416: fix #show for recursive types and modules<br> (Flori=
an Angeletti, review by Gabriel Scherer)<br><br>* #7469, #10408: Sys.time n=
ow returns processor time on Windows (previously<br> returned wall-cl=
ock time)<br> (David Allsopp, review by Nicol=C3=A1s Ojeda B=C3=A4r)<=
br><br>* #8857, #10220: Don't clobber GetLastError() in caml_leave_blocking=
_section<br> when the systhreads library is loaded.<br> (David =
Allsopp, report by Anton Bachin, review by Xavier Leroy)<br><br>- #8575, #1=
0362: Surprising interaction between polymorphic variants and<br> con=
structor disambiguation.<br> (Jacques Garrigue, report and review by =
Thomas Refis)<br><br>- #8917, #8929, #9889, #10219: fix printing of nested =
recursive definitions<br> in presence of a name collision.<br> =
(Florian Angeletti, report by Thomas Refis, review by Gabriel Scherer)<br><=
br>- #10005: Try expanding aliases in Ctype.nondep_type_rec<br> (Step=
hen Dolan, review by Gabriel Scherer, Leo White and Xavier Leroy)<br><br>- =
#10072, #10085: Check that sizes and offsets in stack frame descriptors<br>=
do not overflow the 16-bit fields where they are stored.<br> (=
Xavier Leroy, report by Github user pveber, review by Gabriel Scherer)<br><=
br>- #10087, #10138: In the toplevel REPL, don't use the cache<br> of=
included directories, so that files created or deleted while<br> the=
REPL is running are correctly handled.<br> (Xavier Leroy, report by =
Github user quakerquickoats, review by<br> Jeremie Dimino)<br><=
br>- #10294, #10295: fix an assert-failure in pattern-matching compilation<=
br> (Gabriel Scherer, review by Thomas Refis and Luc Maranget,<br>&nb=
sp; report by Nicol=C3=A1s Ojeda B=C3=A4r)<br><br>- #10147, #10148: F=
ix building runtime with GCC on macOS.<br> (David Allsopp, report by =
John Skaller)<br><br>- #10166: Fix illegal permutation error reporting in m=
odule aliases.<br> (Matthew Ryan, review by Florian Angeletti)<br><br=
>- #10189, #10190, #10347: Universal variables leaking through GADT equatio=
ns<br> (Jacques Garrigue, report and review by Leo White)<br><br>- #1=
0205: Avoid overwriting closures while initialising recursive modules<br>&n=
bsp; (Stephen Dolan, review by Xavier Leroy, Hugo Heuzard and Vincent Lavir=
on)<br><br>- #10253, #10373: tweak error message for unknown variant constr=
uctors<br> or record fields in type-directed disambiguation<br> =
(Florian Angeletti, report by Hongbo Zhang, review by Gabriel Scherer)<br>=
<br>* #10277, #10383: Need to detect ambiguity recursively inside types to<=
br> guarantee principality (affects only principal mode)<br> (J=
acques Garrigue, review by Thomas Refis, Leo White and Kate Deplaix)<br><br=
>- #10283, #10284: Enforce right-to-left evaluation order for Lstaticraise<=
br> (Vincent Laviron, report by Github user Ngoguey42, review by Gabr=
iel Scherer)<br><br>- #10298, #10305: Incorrect propagation of type equalit=
ies in functor<br> application<br> (Jacques Garrigue, report an=
d review by Didier Remy)<br><br>- #10324, #10325: Prevent generation of Lse=
nd(Cached, _) in bytecode<br> (Vincent Laviron, report by Yawar Amin =
and Nicol=C3=A1s Ojeda B=C3=A4r, review by<br> Jacques Garrigue=
)<br><br>- #10338, #10340: Translcore.push_defaults does not respect scopin=
g<br> (Jacques Garrigue, report and review by Stephen Dolan)<br><br>-=
#10351: Fix DLL loading with binutils 2.36+ on mingw-w64<br> (David =
Allsopp, review by Nicol=C3=A1s Ojeda B=C3=A4r)<br><br>- #10339, #10354, #1=
0387: Fix handling of exception-raising specific<br> operations durin=
g spilling and liveness analysis.<br> (This bug affects ARM and ARM64=
.)<br> In passing, refactor Proc.op_is_pure and Mach.operation_can_ra=
ise.<br> (Xavier Leroy, report by Richard Bornat, review by Stephen D=
olan<br> and Mark Shinwell)<br><br>- #10371: no longer generatd=
useless `.cds` file when using<br> `-output-complete-exe`.<br> =
(Nicol=C3=A1s Ojeda B=C3=A4r, review by David Allsopp)<br><br>- #10376: Li=
nk runtime libraries correctly on msvc64 in -output-complete-obj<br> =
(David Allsopp, review by Gabriel Scherer)<br><br>- #10380: Correct handlin=
g of UTF-8 paths in configure on Windows<br> (David Allsopp, review b=
y S=C3=A9bastien Hinderer)<br><br>- #10450, #10558: keep %apply and %revapp=
ly primitives working with abstract<br> types. This breach of backwar=
d compatibility was only present in the alpha<br> releases of OCaml 4=
.13.0 .<br> (Florian Angeletti, review by Thomas Refis and Leo White)=
<br><br>- #10454: Check row_more in nondep_type_rec.<br> (Leo White, =
review by Thomas Refis)<br><br>- #10468: Correctly pretty print local type =
substitution, e.g. type t :=3D ...,<br> with -dsource<br> (Matt=
Else, review by Florian Angeletti)<br><br>- #10461, #10498: `caml_send*` h=
elper functions take derived pointers<br> as arguments. Those m=
ust be declared with type Addr instead of Val.<br> Moreover, poll poi=
nt insertion must be disabled for `caml_send*`,<br> otherwise the der=
ived pointer is live across a poll point.<br> (Vincent Laviron and Xa=
vier Leroy, review by Xavier Leroy and Sadiq Jaffer)<br><br>- #10511: Cygwi=
n ports now correctly configure when flexdll is not available.<br> (D=
avid Allsopp, review by Florian Angeletti)<br><br>- #10550, #10551: fix pre=
tty-print of gadt-pattern-with-type-vars<br> (Chet Murthy, review by =
Gabriel Scherer)<br><br>- #10584, #10856: Standard Library documentation bu=
ild no longer fails if<br> optional libraries have been disabled.<br>=
(David Allsopp, report by Yuri Victorovich review by Florian Angelet=
ti)<br><br>- #10593: Fix untyping of patterns without named existential qua=
ntifiers. This<br> bug was only present in the beta version of OCaml =
4.13.0.<br> (Ulysse G=C3=A9rard, review by Florian Angeletti)<br><br>=
- #10603, #10611: Fix if condition marked as inconstant in flambda<br> =
; (Vincent Laviron and Pierre Chambart, report by Marcello Seri)<br></div><=
/div></div></body></html>
--=_ce9e6cc3-57b0-4aff-be59-fbf0570f4b8c--