From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail2-relais-roc.national.inria.fr (mail2-relais-roc.national.inria.fr [192.134.164.83]) by c5ff346549e7 (Postfix) with ESMTPS id 1BCC35D5 for ; Fri, 24 Sep 2021 18:25:16 +0000 (UTC) X-IronPort-AV: E=Sophos;i="5.84,326,1620684000"; d="scan'208,217";a="530306935" Received: from prod-listesu18.inria.fr (HELO sympa.inria.fr) ([128.93.162.160]) by mail2-relais-roc.national.inria.fr with ESMTP; 24 Sep 2021 20:25:12 +0200 Received: by sympa.inria.fr (Postfix, from userid 20132) id A3EAFE0284; Fri, 24 Sep 2021 20:25:12 +0200 (CEST) Received: from mail2-relais-roc.national.inria.fr (mail2-relais-roc.national.inria.fr [192.134.164.83]) by sympa.inria.fr (Postfix) with ESMTPS id 28D6FE027C for ; Fri, 24 Sep 2021 20:25:08 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=inria.fr; s=dc; h=date:from:to:message-id:subject:mime-version; bh=RI1o6F3YA3kac0mxrGjHq0SKGLzLN0aTCuh0qozV/QI=; b=DXaQxw/wqEZiFocWXZZwtCFs51h/zryasivko+gOTp8bzPE8FZjjuCMt jeHRJLzwkzqKPaD2nAwGWbG105S0CDMWbW/5FbLUPB6/3Pmh7DgxIol8w cddPQEzYwHCfaKD7bzFWXjIYfhY1T+ObVP0OVQh/HLTiG9gbmFPzoaQy4 A=; IronPort-HdrOrdr: =?us-ascii?q?A9a23=3AqJp3w6hJcEGR3Iyb3H2QPQjKKXBQXr0ji2hC?= =?us-ascii?q?6mlwRA09TyX+raGTdZUguyMc5wxhO03I9erwWpVoIkmyyXcK2+ks1N6ZNWGM0l?= =?us-ascii?q?dAR7sP0WKN+VDdJxE=3D?= X-IronPort-AV: E=Sophos;i="5.84,326,1620684000"; d="scan'208,217";a="530306904" X-MGA-submission: =?us-ascii?q?MDEQ+LtRDXhOohK9iBJx3VOkMaaoUhFIPhZ7GL?= =?us-ascii?q?SPEB9qX7OJZRFGq1xy22Mti+Kn7XXGtuO9xcWa708rp/gQ0rummAJZzg?= =?us-ascii?q?0sXft97yXyB1Xt9OUBor88X3CUy2XWjr6cwdRjcRMeiXnynqEN5qQuqP?= =?us-ascii?q?/ClDQksDZrNruJsq+RsP6VQA=3D=3D?= Received: from zcs-store1.inria.fr ([128.93.142.28]) by mail2-relais-roc.national.inria.fr with ESMTP; 24 Sep 2021 20:25:07 +0200 Date: Fri, 24 Sep 2021 20:25:07 +0200 (CEST) From: Florian Angeletti To: caml-list Message-ID: <1326429875.7522342.1632507907690.JavaMail.zimbra@inria.fr> MIME-Version: 1.0 Content-Type: multipart/alternative; boundary="=_87a667c7-be0a-4ea4-95a1-a027fc7b9c41" X-Originating-IP: [37.164.126.22] X-Mailer: Zimbra 8.8.15_GA_4125 (ZimbraWebClient - FF92 (Linux)/8.8.15_GA_4059) Thread-Index: DO9dWXNVqnUxD74/gSnlShAGmBfJbQ== Thread-Topic: OCaml releases 4.13.0 and 4.12.1 Subject: [Caml-list] OCaml releases 4.13.0 and 4.12.1 Reply-To: Florian Angeletti X-Loop: caml-list@inria.fr X-Sequence: 18574 Errors-To: caml-list-owner@inria.fr Precedence: list Precedence: bulk Sender: caml-list-request@inria.fr X-no-archive: yes List-Id: List-Help: List-Subscribe: List-Unsubscribe: List-Post: List-Owner: List-Archive: Archived-At: --=_87a667c7-be0a-4ea4-95a1-a027fc7b9c41 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 --=_87a667c7-be0a-4ea4-95a1-a027fc7b9c41 Content-Type: text/html; charset=utf-8 Content-Transfer-Encoding: quoted-printable
Dear OCaml users,

We have the pleasu= re of celebrating the 175th anniversary of the discovery of Neptune
by a= nnouncing the joint releases of OCaml version 4.13.0 and 4.12.1.

Som= e of the highlights in the 4.13.0 release are:

- Safe points: a mult= icore prerequisite that ensures that ocamlopt-generated code can always be = interrupted.
- The best-fit GC allocation policy is now the default poli= cy (and many other GC improvements).
- Named existential type variables = in pattern matching: `Showable (type a) (x, show : a * (a -> string))`.<= br>
- Improved error messages for functor application and functor types.=
- Let-punning for monadic let: `let* x =3D x in` can be shortened to `l= et* x in`.
- Module type substitutions `SIG with module type T =3D F(X).= S`.

- Many other quality of life improvements
- Many bug fixes
The 4.12.1 release is a collection of safe bug fixes, cherry-picked fr= om the 4.13.0 development
cycle. If you were using OCaml 4.12.0 and cann= ot yet upgrade to 4.13.0, this release is for you.

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

Those releases are ava= ilable as OPAM switches, and as a source download here:

  https= ://github.com/ocaml/ocaml/archive/4.13.0.tar.gz
  https://caml.inri= a.fr/pub/distrib/ocaml-4.13/

and there:

  https://github= .com/ocaml/ocaml/archive/4.12.1.tar.gz
  https://caml.inria.fr/pub/= distrib/ocaml-4.12/


Happy hacking,

-- Florian Angeletti f= or the OCaml team.


OCaml 4.12.1 (24 September 2021)
---------= ---------------------------------------

### Bug fixes:

- #101= 07: Ensure modules compiled with -afl-instrument can still link on
 = ; platforms without AFL support.
  (David Allsopp, review by Xavier= Leroy)

- #10294, #10295: fix an assert-failure in pattern-matching = compilation
  (Gabriel Scherer, review by Thomas Refis and Luc Mara= nget,
   report by Nicol=C3=A1s Ojeda B=C3=A4r)

- #1031= 0: configure's --enable-spacetime option now causes an error rather than  being silently ignored.
  (David Allsopp, review by Gabriel= Scherer)

- #10351: Fix DLL loading with binutils 2.36+ on mingw-w64=
  (David Allsopp, review by Nicol=C3=A1s Ojeda B=C3=A4r)

- = #10442, #10446: Fix regression in the toplevel to #directory caused by
&= nbsp; corrections and improvements to the Load_path in #9611. #directory no= w
  adds the path to the start of the load path again (so files in = the newly
  added directory take priority).
  (David Allsop= p, report by Vasile Rotaru, review by Florian Angeletti
   and= Nicol=C3=A1s Ojeda B=C3=A4r)

- #10449: Fix major GC work accounting= (the GC was running too fast).
  (Damien Doligez, report by Stephe= n Dolan, review by Nicol=C3=A1s Ojeda B=C3=A4r
   and Sadiq Ja= ffer)

- #10478: Fix segfault under Windows due to a mistaken initial= ization of thread
  ID when a thread starts.
  (David Allso= pp, Nicol=C3=A1s Ojeda B=C3=A4r, review by Xavier Leroy)

- #10626, #= 10628: Wrong reloading of the x86-64 instruction for
  integer mult= iplication by a constant, causing the assembler to
  reject the oca= mlopt-generated code.
  (Xavier Leroy, report by Dave Aitken, revie= w by Vincent Laviron)


OCaml 4.13.0 (24 September 2021)
------= ------------------------------------------

### Progress towards Mult= icore:

- #10039: Safepoints
  Add poll points to native gene= rated code. These are effectively
  zero-sized allocations and fix = some signal and remembered set
  issues. Also multicore prerequisit= e.
  (Sadiq Jaffer, Stephen Dolan, Damien Doligez, Xavier Leroy,   Anmol Sahoo, Mark Shinwell, review by Damien Doligez, Xavier = Leroy,
   and Mark Shinwell)

- #9876: do not cache the = young_limit GC variable in a processor register.
  This affects the= ARM64, PowerPC and RISC-V ports, making signal handling
  and mino= r GC triggers more reliable, at the cost of a small slowdown.
  (Xa= vier Leroy, review by Nicol=C3=A1s Ojeda B=C3=A4r)

### Language feat= ures (highlights):

- #9584, #7074: Allow to name existentials in pat= tern-matching
  One can now write '(Cstr (type a) (x, y : int * a))= ' to give a name to
  existentials freshly introduced by GADT const= ructors.
  (Jacques Garrigue, review by Leo White and Gabriel Scher= er)

### Compiler user-interface and warnings (highlights):

- = #9331: Improve error messages for functor application and functor types.  (Florian Angeletti and Gabriel Radanne, review by Leo White)
* #10118, #10140: enable warning 6 [labels-omitted] by default.
  = The following now warns:
    let f ~x y =3D ... in f 3 5<= br>  the callsite (f 3 5) has to be turned into (f ~x:3 5).
  = This prevents mistakes where two arguments of the same types are swapped.  (Note: Dune already enables this warning by default.)
  (G= abriel Scherer, review by Xavier Leroy and Florian Angeletti,
 &nbs= p; report by ygrek)

### Manual and documentation (highlights):
- #10247: Add initial tranche of examples to reference manual.
  = Adds some eighty examples to the reference manual, principally to the
&n= bsp; expressions and patterns sections.
  https://ocaml.org/release= s/4.13/manual/patterns.html
  (John Whitington, review by Xavier Le= roy, Gabriel Scherer, @Fourchaux, and
  Florian Angeletti)

-= #9987, #9988, #9996, #9997: add an odoc mode for the documentation
&nbs= p; of the standard library and compiler library
  (Florian Angelett= i, review by David Allsopp, S=C3=A9bastien Hinderer,
   and Ga= briel Scherer)

### Standard library (highlights):

- #944: Add= some missing C99 float operations.  `Stdlib` now contains
  t= he inverse hyperbolic functions
    `acosh`, `asinh`, and= `atanh`.
  These functions were also added to module `Stdlib.Float= ` together with
    `exp2`, `log2`, `cbrt`, `erf`, and `e= rfc`.
  Full support on MSVC requires VS2013+ but emulated versions= are
  still available (for now) for older compilers.
  (Ma= rkus Mottl, review by David Allsopp, Olivier Andrieu, Florian Angeletti,  Nicol=C3=A1s Ojeda B=C3=A4r, Daniel B=C3=BCnzli, Fabian @copy, Pasc= al Cuoq, Damien
  Doligez, S=C3=A9bastien Hinderer, Jacques-Henri J= ourdan, Xavier Leroy, Guillaume
  Melquiond, Perry E. Metzger, Runh= ang Li, Gabriel Scherer, Mark Shinwell,
  Bernhard Schommer and Chr= istophe Troestler)

- #9582: Add Array.{find_opt,find_map,split,combi= ne}.
  (Nicol=C3=A1s Ojeda B=C3=A4r, review by Daniel B=C3=BCnzli a= nd Gabriel Scherer)

- #9533: Added String.starts_with and String.end= s_with.
  (Bernhard Schommer, review by Daniel B=C3=BCnzli, Gabriel= Scherer and
  Alain Frisch)

### Code generation and optimiz= ations (highlights):

- #10404: Add a generic backward dataflow analy= zer and use it to speed up
  liveness analysis
  (Xavier Le= roy, review by Gabriel Scherer, Greta Yorsh, Mark Shinwell)

- #10414= : Avoid compilation times exponential in the nesting of loops
  in = the spilling and reloading passes
  (Xavier Leroy, review by Vincen= t Laviron)

### Internal typechecker changes (highlights):

- #= 10170: Maintain more structural information in type-checking errors
&nbs= p; A mostly-internal change that preserves more information in errors
&n= bsp; during type checking; most significantly, it split the errors from
=   unification, moregen, and type equality into three different types.<= br>  (Antal Spector-Zabusky and Mekhrubon Tuarev, review by Leo White,=
  Florian Angeletti, and Jacques Garrigue)

- #9994: Make Ty= pes.type_expr a private type, and abstract marking mechanism
  (Jac= ques Garrigue and Takafumi Saikawa,
   review by Gabriel Scher= er and Leo White)

### Runtime system (highlights):

- #10188, = #10213: Switch the default allocation policy to best-fit and adjust
&nbs= p; the default overhead parameter accordingly.
  (Damien Doligez, r= eview by Josh Berdine and Xavier Leroy)

- #10549: Stack overflow det= ection and naked pointers checking for ARM64
  (Xavier Leroy, revie= w by Stephen Dolan)

- #9934: Optimise sweeping using prefetching.  (Stephen Dolan and Will Hasenplaugh, review by David Allsopp, Xavie= r
   Leroy and Damien Doligez, benchmarking by Shubham Kumar a= nd KC
   Sivaramakrishnan)

- #10194: Change compaction-= triggering heuristic: use the overhead measured
  by the previous G= C cycle instead of an indirect (and noisy) computation
  of the cur= rent overhead.
  (Damien Doligez, review by Stephen Dolan)

-= #10449: Fix major GC work accounting (the GC was running too fast).
&nb= sp; (Damien Doligez, report by Stephen Dolan, review by Nicol=C3=A1s Ojeda = B=C3=A4r and
   Sadiq Jaffer)


### Language features= :

- #10013: Let-punning
  Allow 'let* x in ...' and 'let%ext= x in ...' as shorthand for
    'let* x =3D x in ...' and= 'let%ext x =3D x in ...' respectively.
  (Stephen Dolan, review by= Gabriel Scherer)

- #10133: module type substitutions
  Allo= w 'SIG with module type T =3D F(X).S', 'SIG with module type T :=3D sig end= '
  and their local equivalent `module type T :=3D sig type u end`<= br>  (Florian Angeletti, review by Gabriel Radanne and Leo White)
<= br>### Type system:

* #10081: Typecheck `x |> f` and `f @@ x` as = `(f x)`
  (Alain Frisch, review by Jacques Garrigue, Josh Berdine a= nd Thomas Refis)

### Runtime system:

- #10318: Windows Unicod= e runtime functions are no longer marked as
  experimental.
&nbs= p; (Nicol=C3=A1s Ojeda B=C3=A4r, review by David Allsopp)

- #9284: A= dd -config option to display the configuration of ocamlrun on stdout,
&n= bsp; including the search path for shared stub libraries.
  (David = Allsopp, review by Xavier Leroy)

- #9919: Introduce caml_record_back= traces and update Interfacing with C to
  refer to it (previous ins= truction to use caml_record_backtrace primitive was
  not possible = without defining CAML_INTERNALS)
  (David Allsopp, review by Xavier= Leroy)

- #10102: Ignore PROFINFO_WIDTH if WITH_PROFINFO is not defi= ned (technically
  a breaking change if the configuration system wa= s being abused before).
  (David Allsopp, review by Xavier Leroy)
- #10107: Ensure modules compiled with -afl-instrument can still link= on
  platforms without AFL support.
  (David Allsopp, revi= ew by Xavier Leroy)

* #10098: Improve command-line parsing in ocamlr= un: strictly recognise options,
  be more informative for `ocamlrun= -I` and support `--` for terminating options
  parsing.
  = (David Allsopp, review by Xavier Leroy)

- #10101: Add -help/--help o= ption to ocamlrun.
  (David Allsopp, review by Xavier Leroy)
- #10136: Minor clean-ups in runtime/io.c and runtime/caml/io.h
  = (Xavier Leroy, review by David Allsopp and Guillaume Munch-Maccagnoni)
<= br>- #10171: Tweak the naked pointers checker so that processes which trigg= er the
  alarm always exit with non-zero status (i.e. exit(0) becom= es exit(70)).
  (David Allsopp, review by Xavier Leroy)

- #1= 0212: Simplify and improve the Windows-specific code that connects
 = ; to the debugger via a socket.
  (Antonin D=C3=A9cimo, review by X= avier Leroy)

- #10217: Fix a segfault in a corner case of compaction= (reported in #9853)
  (Damien Doligez, report by Sadiq Jaffer, rev= iew by Stephen Dolan)

- #10250, #10266: Dynamically allocate alterna= te signal stacks to
   accommodate changes in Glibc 2.34.
&= nbsp; (Xavier Leroy, reports by Tomasz K=C5=82oczko and R.W.M. Jones, revie= w by Anil
   Madhavapeddy, Stephen Dolan, and Florian Angelett= i)

### Code generation and optimizations:

- #1400: Add an opt= ional invariants check on Cmm, which can be activated
  with the -d= cmm-invariants flag
  (Vincent Laviron, with help from Sebastien Hi= nderer, review by Stephen Dolan
   and David Allsopp)

-= #9562, #367: Allow CSE of immutable loads across stores
  (Stephen= Dolan, review by Mark Shinwell)

- #9937: improvements in ARM64 code= generation (constants, sign extensions)
  (Xavier Leroy, review by= Stephen Dolan)

- #10228: Better code-generation for inlined compari= sons
  (Stephen Dolan, review by Alain Frisch and Xavier Leroy)
=
- #10244: Optimise Int32.unsigned_to_int
  (Fabian Hemmer, revi= ew by Stephen Dolan and Xavier Leroy)

- #10302, #10303: Fix incorrec= t instruction selection for string constant loads
  on ppc.
&nbs= p; (David Allsopp, review by Stephen Dolan)

- #10349: Fix destroyed_= at_c_call on RISC-V
  (Mark Shinwell, review by Nicol=C3=A1s Ojeda = B=C3=A4r)

- #10419: Add %frame_pointers primitive which is true only= in native code with
  frame pointers mode enabled.
  (Davi= d Allsopp, review by Vincent Laviron and Mark Shinwell)

### Standard= library:

- #9448: Add String.{empty,cat} as dual of Bytes.{empty,ca= t},
  String.{of,to}_bytes as aliases of Bytes.{to,of}_string,
&= nbsp; Bytes.split_on_char as dual of String.split_on_char, and binary decod= ing
  functions in String to match those in Bytes.
  (David= Allsopp, review by Damien Doligez, Gabriel Scherer and others)

- #9= 487, #9489: Add Random.full_int which allows 62-bit bounds on 64-bit
&nb= sp; systems.
  (David Allsopp, request by Francois Berenger, review= by Xavier Leroy and
   Damien Doligez)

- #9961: Add Ar= ray.fold_left_map.
  (Craig Ferguson, review by Damien Doligez)
=
- #10097: Lazy.map, Lazy.map_val: ('a -> 'b) -> 'a Lazy.t -> '= b Lazy.t
  (map f x) is always (lazy (f (force x))), whereas (map_v= al f x)
  applies f directly if x is already forced.
  (Gab= riel Scherer, review by Nicol=C3=A1s Ojeda B=C3=A4r, Alain Frisch, Xavier L= eroy,
   Daniel B=C3=BCnzli and Stephen Dolan)

- #10242= : Added convenience pretty printer for Either.t in the Format module.
&n= bsp; (Oghenevwogaga Ebresafe, review by Nicol=C3=A1s Ojeda B=C3=A4r,
&nb= sp; Gabriel Scherer and Xavier Van de Woestyne)

- #10352: Seq.(conca= t : 'a t t -> 'a t)
  Seq.concat_map as an alias to Seq.flat_map= ,
  (Gabriel Scherer, review by Ulugbek Abdullaev and Daniel B=C3= =BCnzli
   and Nicol=C3=A1s Ojeda B=C3=A4r and Florian Angelet= ti)

- #882: Add fold_left, fold_right, exists and for_all to String/= Bytes
  (Yotam Barnoy, review by Alain Frisch and Jeremy Yallop)
- #4070, #10398: small optimization of Stdlib.{frexp,modf}.
  = (Markus Mottl, Nicol=C3=A1s Ojeda B=C3=A4r, review by Gabriel Scherer)
<= br>- #10389, #10391, #10392: Add {Int,Int32,Int64,Nativeint}.{min,max}.
=   (Nicol=C3=A1s Ojeda B=C3=A4r and Alain Frisch, review by Xavier Lero= y)

- #10430: Add Format.print_bytes and Format.pp_print_bytes.
&n= bsp; (Gabriel Radanne, review by Gabriel Scherer and David Allsopp)

= ### Other libraries:

* #10084: Unix.open_process_args* functions now= look up the program in the PATH.
  This was already the case under= Windows, but this is now also done under
  Unix. Note that previou= sly the program was interpreted relative to the current
  directory= .
  (Nicol=C3=A1s Ojeda B=C3=A4r, review by Gabriel Scherer and Xav= ier Leroy)

- #10047: Add `Unix.realpath`
  (Daniel B=C3=BCnz= li, review by David Allsopp, Josh Berdine and Gabriel Scherer)

- #10= 184: Remove expensive debug assertion from dynlink.
  (Leo White, r= eview by David Allsopp and Xavier Leroy)

- #10185: Consider that IPv= 6 is always enabled on Windows.
  (Antonin D=C3=A9cimo, review by D= avid Allsopp and Xavier Leroy)

- #10306: Map WSA error code to Unix = errno for sockopt and getsockname
  functions (Antonin D=C3=A9cimo,= review by David Allsopp)

- #10309: Properly return EBADF on error i= n Unix.descr_of_{in,out}_channel on
  Win32 and map Windows error c= orrectly in Unix.truncate and Unix.ftruncate on
  Win32.
  = (David Allsopp, review by Nicol=C3=A1s Ojeda B=C3=A4r)

### Tools:
- #10139: Adds a -nonavbar option to ocamldoc, to remove confusing
=   'Up', 'Previous' and 'Next' links
  (John Whitington, review= by David Allsopp)

- #8645, #10363: ocamldoc: escape `<`, `>`,= and `&` in html backend.
  (Florian Angeletti, report by Wim L= ewis, review by Gabriel Scherer)

### Manual and documentation:
- #9525, #10402: document that ocamldoc only creates paragraphs
 = at the toplevel of documentation comments
  (Florian Angeletti, re= port by Hendrik Tews, review by Gabriel Scherer)

- #10206: Split lab= els and polymorphic variants tutorials in two.
  Moves the GADTs tu= torial from the Language Extensions chapter
  to the tutorials.
=   (John Whitington, review by Florian Angeletti and Xavier Leroy)
<= br>- #9786, #10181: improved documentation of Unix.{in,out}_channel_of_desc= r
  with respect to closing.
  (Xavier Leroy, report by Jac= ques-Henri Jourdan, review by Guillaume
   Munch-Maccagnoni, G= abriel Scherer, Jacques-Henri Jourdan)

- #10139: Use the new -nonavb= ar option to improve navigation within
  the reference manual stdli= b documentation.
  (John Whitington, review by David Allsopp)
- #1351: Document `-output-complete-obj` option in the manual.
  = (Fran=C3=A7ois Bobot, Nicol=C3=A1s Ojeda B=C3=A4r, review by Daniel B=C3=BC= nzli and Damien
  Doligez)

- #9632: Document incremental bui= ld solutions with opam
  (Vincent Laviron, review by Daniel B=C3=BC= nzli and Gabriel Scherer)

- #10497: Styling changes in the post-proc= essed HTML manual (webman)
  (Wiktor Kuchta, review by Florian Ange= letti)

- #10605: manual, name few css classes to ease styling and ma= intainability.
  (Florian Angeletti, review by Wiktor Kuchta and Ga= briel Scherer)

### Compiler user-interface and warnings:

- #1= 737, #2092, #7852, #7859, #10405, #10417: Update locations during
 = destructive substitutions
  (Thomas Refis, review by Gabriel Radan= ne, report by Hugo Heuzard)

- #2245: Improve error message for link = order error in bytecode
  (Pierre Chambart, review by J=C3=A9r=C3= =A9mie Dimino and Gabriel Scherer)

- #8732, improved error messages = for invalid private row type definitions.
  For instance, [ type t = =3D private [< `A > `A ] ] .
  (Florian Angeletti, review by = Jacques Garrigue, Thomas Refis,
   and Gabriel Scherer)
- #9407: optional warning for missing mli interface file
  (Anukri= ti Kumar, review by Florian Angeletti)

- #9960, #10619: extend ocaml= c/ocamlopt's -o option to work when
  compiling C files
  (= S=C3=A9bastien Hinderer, reported by Daniel B=C3=BCnzli, review by
 = ; Florian Angeletti and Gabriel Scherer)

- #10095: minor simplificat= ions to some syntax error messages.
  (Fran=C3=A7ois Pottier, revie= w by Gabriel Scherer and Fr=C3=A9d=C3=A9ric Bour.)

- #10196, #10197:= better error message on empty character literals ''.
  (Gabriel Sc= herer, review by David Allsopp and Florian Angeletti
   and Da= niel B=C3=BCnzli, report by Robin Bj=C3=B6rklin)

- #8877: Call the l= inker when ocamlopt is invoked with .o and .a files only.
  (Greta = Yorsh, review by Leo White)

- #10207, #10312: deprecate consecutive = letters in warning
  specifications.
  The form `-w aBcD` w= as equivalent to `-w -a+b-c+d`.
  It is now deprecated to improve t= he coexistence with warning mnemonics.
  However, using isolated si= ngle letter is not deprecated to allow the form
  `-w "A-32..50-45"= `.
  (Florian Angeletti, review by Damien Doligez and Gabriel Scher= er)

- #10232: Warning for unused record fields.
  (Leo White= , review by Florian Angeletti)

### Internal/compiler-libs changes:
- #9243, simplify parser rules for array indexing operations
 = ; (Florian Angeletti, review by Damien Doligez and Gabriel Scherer)

= - #9650, #9651: keep refactoring the pattern-matching compiler
  (G= abriel Scherer, review by Thomas Refis and Florian Angeletti)

- #982= 7: Replace references with functions arguments in Simplif
  (Anukri= ti Kumar, review by Vincent Laviron and David Allsop)

- #10007: Driv= er.compile_common: when typing a .ml file, return the
  compilation= unit signature (inferred or from the .cmi) in addition
  to the im= plementation and the coercion.
  (Leandro Ostera, review by Gabriel= Scherer and Thomas Refis)

- #10045: Add libext variable to ocamltes= t and enable C# tests on on mingw
  (David Allsopp, review by Gabri= el Scherer)

* #10061, #10078, #10187: remove library `ocamlopttoplev= el`, remove modules
  `Opttoploop`, `Opttopstart`, which are replac= ed by `Toploop` and `Topstart` in
  library `ocamltoplevel`, made a= vailable in native code.
  (Louis Gesbert, review by Jeremie Dimino= , Mark Shinwell and Gabriel Radanne)

- #10124: remove duplicated cod= e from the native toplevel, split toplevel
  implementation into th= e shared part (`Topcommon`, etc.) and specific ones
  (`Topeval`, `= Trace`, `Topmain`).
  (Louis Gesbert, review by Jeremie Dimino and = Gabriel Radanne)

- #10086: add the commands `make list-parse-errors`= and `make
  generate-parse-errors` to generate a set of syntactica= lly incorrect
  sentences that covers all error states of the LR au= tomaton. Add these
  sentences to the test suite. This can be used = to evaluate the quality of the
  parser's syntax error messages and= (in the future) to evaluate the impact of
  changes in the parser.=
  (Fran=C3=A7ois Pottier, review by Gabriel Scherer and Xavier Ler= oy.)

- #10090: Distinguished constructors for ref variables at lambd= a level
  (Keryan Didier, review by Gabriel Scherer and Vincent Lav= iron)

- #10113: add a `-timeout` option to ocamltest and use it in t= he test suite.
  (Xavier Leroy and Gabriel Scherer, review by S=C3= =A9bastien Hinderer
   and David Allsopp)

* #10169, #10= 270, #10301, #10451: Use capitalized module names in the Standard
 = Library prefixing scheme to match Dune, e.g. Stdlib__String instead of
=   Stdlib__string. This is a breaking change only to code which attempt= ed to use
  the internal names before. The Standard Library generat= ed by the Dune rules is
  now equivalent to the main build (the Dun= e rules still do not generate a
  distributable compiler).
 = ; (David Allsopp and Mark Shinwell, review by Gabriel Scherer)

- #10= 327: Add a subdirectories variable and a copy action to ocamltest
 = (S=C3=A9bastien Hinderer, review by David Allsopp)

- #10358: Use a = hash table for the load path.
  (Leo White, review by Gabriel Scher= er)

- #8936: Per-function environment for Emit
  (Greta Yors= h, review by Vincent Laviron and Florian Angeletti)

- #10543: Fix As= t_mapper to apply the mapping function to the constants in
  "inter= val" patterns `c1..c2`.
  (Guillaume Petiot, review by Gabriel Sche= rer and Nicol=C3=A1s Ojeda B=C3=A4r)

### Internal typechecker change= s:

- #10174: Make Tsubst more robust by avoiding strange workarounds=
  (Takafumi Saikawa and Jacques Garrigue, review by Gabriel Schere= r and
   Florian Angeletti)

- #10265: Move type_unboxed= .unboxed into type_kind
  (Stephen Dolan, review by Gabriel Scherer= )

- #10307: Refactor type_description in the typing env
  (N= icolas Chataing, review by Takafumi Saikawa, Florian Angeletti and Thomas   Refis)

- #10311: Separate the constraint-solving part= of Typecore.type_pat into
  specific solver functions.
  (= Jacques Garrigue and Takafumi Saikawa, review by Gabriel Scherer)

- = #10428: Make build_other_constrs work with names instead of tags.
 = (Nicolas Chataing, review by Florian Angeletti)

### Build system:
- #10332, #10333: Generate lambda/runtimedef.ml correctly in Swedish = locale.
  (the letter 'w' is not included in '[a-z]' in sv_SE.UTF-8= )
  (David Allsopp, report by Anders Jackson, review by Florian Ang= eletti and
   Gabriel Scherer)

- #10289, #10406: Do not= print option documentation in usage messages.
    (Pavlo= Khrystenko, review by Gabriel Scherer, fix by Kate Deplaix)

- #9191= , #10091, #10182: take the LDFLAGS variable into account, except on
&nbs= p; flexlink-using systems.
  (Gabriel Scherer, review by S=C3=A9bas= tien Hinderer and David Allsopp,
   report by Ralph Seichter)<= br>
- #10135: Overhaul the FlexDLL bootstrap process. It's now fully int= egrated
  with the default build target and controlled by --with-fl= exdll which allows
  externally downloaded sources for FlexDLL to b= e specified. A separate
  non-shared version of the runtime is buil= t, and shared artefacts are no longer
  built twice. When bootstrap= ping, any flexlink in PATH is now ignored and the
  Cygwin port als= o supports bootstrapping FlexDLL. flexlink.opt is automatically
  b= uilt and installed as part of opt.opt/world.opt.
  (David Allsopp, = review by S=C3=A9bastien Hinderer)

- #10156: configure script: fix s= ockets feature detection.
  (Lucas Pluvinage, review by David Allso= pp and Damien Doligez)

- #10176, #10632: By default, call the assemb= ler through the C compiler driver
  (S=C3=A9bastien Hinderer, revie= w by Gabriel Scherer, David Allsopp and Xavier
  Leroy)

- #1= 0186: configure wasn't using library link flags when searching for
 = ; network functions on systems where they're not in libc. Fix IPv6 and
&= nbsp; socklen_t detection on Windows.
  (Antonin D=C3=A9cimo, revie= w by David Allsopp and S=C3=A9bastien Hinderer)

- #10366: Make it po= ssible to use the OCAMLRUN variable to specify
  which runtime to u= se while building the compilers (S=C3=A9bastien Hinderer,
  review = by David Allsopp)

- #10451, #10635: Replace the use of iconv with a = C utility to convert $(LIBDIR)
  to a C string constant on Windows = when building the runtime. Hardens the
  generation of the constant= on Unix for paths with backslashes, double-quotes
  and newlines.<= br>  (David Allsopp, review by Florian Angeletti and S=C3=A9bastien Hi= nderer)

- #10471: Fix detection of arm32 architectures with musl in = configure.
  (Louis Gesbert, review by David Allsopp)

### Bu= g fixes:

- #6654, #9774, #10401: make `include` and with `constraint= s` handle correctly
  the ghost components of signatures. For insta= nce, in

    include struct class c =3D object end end= type c

   the type `c` shadows the `class c` to avoid sha= dowing only the ghost type
   c introduced by the class.
&n= bsp; (Florian Angeletti, report by Eduardo Rafael, review by Gabriel Schere= r)

- #6985, #10385: remove all ghost row types from included modules=
  (Florian Angeletti, review by Gabriel Scherer)

- #7453, #= 9828, #10416: fix #show for recursive types and modules
  (Florian = Angeletti, review by Gabriel Scherer)

* #7469, #10408: Sys.time now = returns processor time on Windows (previously
  returned wall-clock= time)
  (David Allsopp, review by Nicol=C3=A1s Ojeda B=C3=A4r)
=
* #8857, #10220: Don't clobber GetLastError() in caml_leave_blocking_se= ction
  when the systhreads library is loaded.
  (David All= sopp, report by Anton Bachin, review by Xavier Leroy)

- #8575, #1036= 2: Surprising interaction between polymorphic variants and
  constr= uctor disambiguation.
  (Jacques Garrigue, report and review by Tho= mas Refis)

- #8917, #8929, #9889, #10219: fix printing of nested rec= ursive definitions
  in presence of a name collision.
  (Fl= orian Angeletti, report by Thomas Refis, review by Gabriel Scherer)

= - #10005: Try expanding aliases in Ctype.nondep_type_rec
  (Stephen= Dolan, review by Gabriel Scherer, Leo White and Xavier Leroy)

- #10= 072, #10085: Check that sizes and offsets in stack frame descriptors
&nb= sp; do not overflow the 16-bit fields where they are stored.
  (Xav= ier Leroy, report by Github user pveber, review by Gabriel Scherer)

= - #10087, #10138: In the toplevel REPL, don't use the cache
  of in= cluded directories, so that files created or deleted while
  the RE= PL is running are correctly handled.
  (Xavier Leroy, report by Git= hub user quakerquickoats, review by
   Jeremie Dimino)

= - #10294, #10295: fix an assert-failure in pattern-matching compilation
=   (Gabriel Scherer, review by Thomas Refis and Luc Maranget,
 =   report by Nicol=C3=A1s Ojeda B=C3=A4r)

- #10147, #10148: Fix = building runtime with GCC on macOS.
  (David Allsopp, report by Joh= n Skaller)

- #10166: Fix illegal permutation error reporting in modu= le aliases.
  (Matthew Ryan, review by Florian Angeletti)

- = #10189, #10190, #10347: Universal variables leaking through GADT equations<= br>  (Jacques Garrigue, report and review by Leo White)

- #1020= 5: Avoid overwriting closures while initialising recursive modules
 = ; (Stephen Dolan, review by Xavier Leroy, Hugo Heuzard and Vincent Laviron)=

- #10253, #10373: tweak error message for unknown variant construct= ors
  or record fields in type-directed disambiguation
  (F= lorian Angeletti, report by Hongbo Zhang, review by Gabriel Scherer)
* #10277, #10383: Need to detect ambiguity recursively inside types to
=   guarantee principality (affects only principal mode)
  (Jacq= ues Garrigue, review by Thomas Refis, Leo White and Kate Deplaix)

- = #10283, #10284: Enforce right-to-left evaluation order for Lstaticraise
=   (Vincent Laviron, report by Github user Ngoguey42, review by Gabriel= Scherer)

- #10298, #10305: Incorrect propagation of type equalities= in functor
  application
  (Jacques Garrigue, report and r= eview by Didier Remy)

- #10324, #10325: Prevent generation of Lsend(= Cached, _) in bytecode
  (Vincent Laviron, report by Yawar Amin and= Nicol=C3=A1s Ojeda B=C3=A4r, review by
   Jacques Garrigue)
- #10338, #10340: Translcore.push_defaults does not respect scoping  (Jacques Garrigue, report and review by Stephen Dolan)

- #1= 0351: Fix DLL loading with binutils 2.36+ on mingw-w64
  (David All= sopp, review by Nicol=C3=A1s Ojeda B=C3=A4r)

- #10339, #10354, #1038= 7: Fix handling of exception-raising specific
  operations during s= pilling and liveness analysis.
  (This bug affects ARM and ARM64.)<= br>  In passing, refactor Proc.op_is_pure and Mach.operation_can_raise= .
  (Xavier Leroy, report by Richard Bornat, review by Stephen Dola= n
   and Mark Shinwell)

- #10371: no longer generatd us= eless `.cds` file when using
  `-output-complete-exe`.
  (N= icol=C3=A1s Ojeda B=C3=A4r, review by David Allsopp)

- #10376: Link = runtime libraries correctly on msvc64 in -output-complete-obj
  (Da= vid Allsopp, review by Gabriel Scherer)

- #10380: Correct handling o= f UTF-8 paths in configure on Windows
  (David Allsopp, review by S= =C3=A9bastien Hinderer)

- #10450, #10558: keep %apply and %revapply = primitives working with abstract
  types. This breach of backward c= ompatibility was only present in the alpha
  releases of OCaml 4.13= .0 .
  (Florian Angeletti, review by Thomas Refis and Leo White)
- #10454: Check row_more in nondep_type_rec.
  (Leo White, rev= iew by Thomas Refis)

- #10468: Correctly pretty print local type sub= stitution, e.g. type t :=3D ...,
  with -dsource
  (Matt El= se, review by Florian Angeletti)

- #10461, #10498: `caml_send*` help= er functions take derived pointers
  as arguments.  Those must= be declared with type Addr instead of Val.
  Moreover, poll point = insertion must be disabled for `caml_send*`,
  otherwise the derive= d pointer is live across a poll point.
  (Vincent Laviron and Xavie= r Leroy, review by Xavier Leroy and Sadiq Jaffer)

- #10511: Cygwin p= orts now correctly configure when flexdll is not available.
  (Davi= d Allsopp, review by Florian Angeletti)

- #10550, #10551: fix pretty= -print of gadt-pattern-with-type-vars
  (Chet Murthy, review by Gab= riel Scherer)

- #10584, #10856: Standard Library documentation build= no longer fails if
  optional libraries have been disabled.
&nb= sp; (David Allsopp, report by Yuri Victorovich review by Florian Angeletti)=

- #10593: Fix untyping of patterns without named existential quanti= fiers. This
  bug was only present in the beta version of OCaml 4.1= 3.0.
  (Ulysse G=C3=A9rard, review by Florian Angeletti)

- #= 10603, #10611: Fix if condition marked as inconstant in flambda
  (= Vincent Laviron and Pierre Chambart, report by Marcello Seri)

--=_87a667c7-be0a-4ea4-95a1-a027fc7b9c41--