From 7a20c9322f827923baa6a9907998f670463ce447 Mon Sep 17 00:00:00 2001 From: Florian Angeletti Date: Mon, 13 May 2024 14:28:08 +0200 Subject: [PATCH 2/7] Changes copy-editing --- Changes | 398 ++++++++++++++++++++++++++++---------------------------- 1 file changed, 201 insertions(+), 197 deletions(-) diff --git a/Changes b/Changes index 1af198ba77..75842fc216 100644 --- a/Changes +++ b/Changes @@ -1,5 +1,5 @@ -OCaml 5.2.0 ------------- +OCaml 5.2.0 (13 May 2024) +------------------------- (Changes that can break existing programs are marked with a "*") @@ -12,60 +12,6 @@ OCaml 5.2.0 - #12667: extend the latter to POWER 64 bits, big-endian, ELFv2 ABI (A. Wilcox, review by Xavier Leroy) -### Language features: - -- #12295, #12568: Give `while true' a polymorphic type, similarly to - `assert false' - (Jeremy Yallop, review by Nicolás Ojeda Bär and Gabriel Scherer, - suggestion by Rodolphe Lepigre and John Whitington) - -- #12315: Use type annotations from arguments in let rec - (Stephen Dolan, review by Gabriel Scherer) - -- #11252, RFC 27: Support raw identifier syntax \#foo - (Stephen Dolan, review by David Allsopp, Gabriel Scherer and Olivier Nicole) - -- #12044: Add local module open syntax for types. - ``` - module A = struct - type t = int - type r = unit - type s = string - end - - type example = A.(t * r * s) - ``` - (Alistair O'Brien, review by Gabriel Scherer, Nicolás Ojeda Bär - and Florian Angeletti) - -- #12456: Document the incompatibility between effects on the one - hand, and `caml_callback` and asynchronous callbacks (signal - handlers, finalisers, memprof callbacks...) on the other hand. - (Guillaume Munch-Maccagnoni, review by KC Sivaramakrishnan) - -- #12375: allow use of [@untagged] for all immediate types like char, bool, - and variant with only constant constructors. - (Christophe Raffalli, review by Gabriel Scherer) - -* #12502: the compiler now normalizes the newline sequence \r\n to - a single \n character during lexing, to guarantee that the semantics - of newlines in string literals is not modified by Windows tools - transforming \n into \r\n in source files. - Warning 29 [eol-in-string] is not emitted anymore, as the normalization - gives a more robust semantics to newlines in string literals. - (Gabriel Scherer and Damien Doligez, review by Daniel Bünzli, David - Allsopp, Andreas Rossberg, Xavier Leroy, report by Andreas Rossberg) - -- #13130: minor fixes to pprintast for raw identifiers and local module open - syntax for types. - (Chet Murthy, review by Gabriel Scherer) - -### Type system: - -- #12313, #11799: Do not re-build as-pattern type when a ground type annotation - is given. This allows to work around problems with GADTs in as-patterns. - (Jacques Garrigue, report by Leo White, review by Gabriel Scherer) - ### Runtime system: - #12193: Re-introduce GC compaction for shared pools @@ -76,6 +22,12 @@ OCaml 5.2.0 David Allsopp, Miod Vallat, Artem Pianykh, Stephen Dolan, Mark Shinwell and KC Sivaramakrishnan) +- #12114: Add ThreadSanitizer support + (Fabrice Buoro and Olivier Nicole, based on an initial work by Anmol Sahoo, + review by Damien Doligez, Sébastien Hinderer, Jacques-Henri Jourdan, Luc + Maranget, Guillaume Munch-Maccagnoni, Gabriel Scherer) + + - #12850: Update Gc.quick_stat data at the end of major cycles and compaction This PR adds an additional caml_collect_gc_stats_sample_stw to the major heap cycling stw. This means that Gc.quick_stat now actually reflects the state of @@ -148,11 +100,6 @@ OCaml 5.2.0 arise at specific locations during domain creation and shutdown. (Guillaume Munch-Maccagnoni, review by Gabriel Scherer) -- #12114: Add ThreadSanitizer support - (Fabrice Buoro and Olivier Nicole, based on an initial work by Anmol Sahoo, - review by Damien Doligez, Sébastien Hinderer, Jacques-Henri Jourdan, Luc - Maranget, Guillaume Munch-Maccagnoni, Gabriel Scherer) - - #11911, #12381: Restore statmemprof functionality in part, with some API changes in Gc.Memprof. (Nick Barnes, review by Jacques-Henri Jourdan @@ -264,34 +211,48 @@ OCaml 5.2.0 (Olivier Nicole, suggested by Stephen Dolan, review by Gabriel Scherer, Miod Vallat and Damien Doligez) -### Code generation and optimizations: +### Language features: -- #11239: on x86-64 and RISC-V, reduce alignment of OCaml stacks from 16 to 8. - This reduces stack usage. It's only C stacks that require 16-alignment. - (Xavier Leroy, review by Gabriel Scherer and Stephen Dolan) +- #12295, #12568: Give `while true' a polymorphic type, similarly to + `assert false' + (Jeremy Yallop, review by Nicolás Ojeda Bär and Gabriel Scherer, + suggestion by Rodolphe Lepigre and John Whitington) -- #12311: on POWER, 32-bit FP numbers stored in memory (e.g. in bigarrays) - were not correctly rounded sometimes. - (Xavier Leroy, review by Anil Madhavapeddy and Tim McGilchrist) +- #12044: Add local module open syntax for types. + ``` + module A = struct + type t = int + type r = unit + type s = string + end -- #12551, #12608, #12782, #12596: Overhaul of recursive value compilation. - Non-function recursive bindings are now forbidden from Lambda onwards, - and compiled using a new Value_rec_compiler module. - (Vincent Laviron and Lunia Ayanides, review by Gabriel Scherer, - Stefan Muenzel and Nathanaëlle Courant) + type example = A.(t * r * s) + ``` + (Alistair O'Brien, review by Gabriel Scherer, Nicolás Ojeda Bär + and Florian Angeletti) -- #1809, #12181: rewrite `compare x y op 0` to `x op y` when values are integers - (Xavier Clerc, Stefan Muenzel, review by Gabriel Scherer and Vincent Laviron) +- #11252, RFC 27: Support raw identifier syntax \#foo + (Stephen Dolan, review by David Allsopp, Gabriel Scherer and Olivier Nicole) -- #12825: disable common subexpression elimination for atomic loads... again. - (Gabriel Scherer, review by KC Sivaramakrishnan, Xavier Leroy - and Vincent Laviron, report by Vesa Karvonen) + +- #12315: Use type annotations from arguments in let rec + (Stephen Dolan, review by Gabriel Scherer) + +- #12375: allow use of [@untagged] for all immediate types like char, bool, + and variant with only constant constructors. + (Christophe Raffalli, review by Gabriel Scherer) + +* #12502: the compiler now normalizes the newline sequence \r\n to + a single \n character during lexing, to guarantee that the semantics + of newlines in string literals is not modified by Windows tools + transforming \n into \r\n in source files. + Warning 29 [eol-in-string] is not emitted anymore, as the normalization + gives a more robust semantics to newlines in string literals. + (Gabriel Scherer and Damien Doligez, review by Daniel Bünzli, David + Allsopp, Andreas Rossberg, Xavier Leroy, report by Andreas Rossberg) ### Standard library: -- #12716: Add `Format.pp_print_nothing` function. - (Léo Andrès, review by Gabriel Scherer and Nicolás Ojeda Bär) - - #11563: Add the Dynarray module to the stdlib. Dynamic arrays are arrays whose length can be changed by adding or removing elements at the end, similar to 'vectors' in C++ or Rust. @@ -299,6 +260,10 @@ OCaml 5.2.0 Daniel Bünzli, Guillaume Munch-Maccagnoni, Clément Allain, Damien Doligez, Wiktor Kuchta and Pieter Goetschalckx) + +- #12716: Add `Format.pp_print_nothing` function. + (Léo Andrès, review by Gabriel Scherer and Nicolás Ojeda Bär) + * #6732, #12423: Make Buffer.add_substitute surjective and fix its documentation. (Damien Doligez, review by Antonin Décimo) @@ -380,6 +345,35 @@ OCaml 5.2.0 C API. (David Allsopp, review by Nicolás Ojeda Bär and Xavier Leroy) +### Type system: + +- #12313, #11799: Do not re-build as-pattern type when a ground type annotation + is given. This allows to work around problems with GADTs in as-patterns. + (Jacques Garrigue, report by Leo White, review by Gabriel Scherer) + +### Code generation and optimizations: + +- #11239: on x86-64 and RISC-V, reduce alignment of OCaml stacks from 16 to 8. + This reduces stack usage. It's only C stacks that require 16-alignment. + (Xavier Leroy, review by Gabriel Scherer and Stephen Dolan) + +- #12311: on POWER, 32-bit FP numbers stored in memory (e.g. in bigarrays) + were not correctly rounded sometimes. + (Xavier Leroy, review by Anil Madhavapeddy and Tim McGilchrist) + +- #12551, #12608, #12782, #12596: Overhaul of recursive value compilation. + Non-function recursive bindings are now forbidden from Lambda onwards, + and compiled using a new Value_rec_compiler module. + (Vincent Laviron and Lunia Ayanides, review by Gabriel Scherer, + Stefan Muenzel and Nathanaëlle Courant) + +- #1809, #12181: rewrite `compare x y op 0` to `x op y` when values are integers + (Xavier Clerc, Stefan Muenzel, review by Gabriel Scherer and Vincent Laviron) + +- #12825: disable common subexpression elimination for atomic loads... again. + (Gabriel Scherer, review by KC Sivaramakrishnan, Xavier Leroy + and Vincent Laviron, report by Vesa Karvonen) + ### Other libraries: - #12213: Dynlink library, improve legibility of error messages @@ -390,98 +384,14 @@ OCaml 5.2.0 instead of `value`. (Xavier Leroy, review by David Allsopp) -### Tools: - -- #12340: testsuite: collect known issues with current -short-paths - implementation for existential types - (Florian Angeletti, Samuel Hym, review by Florian Angeletti and Thomas Refis) - -- #12147: ocamllex: Allow carriage returns at the end of line directives. - (SeungCheol Jung, review by Nicolás Ojeda Bär) - -- #12260: Fix invalid_argument on some external or module aliases in ocamlnat - (Fabian Hemmer, review by Vincent Laviron) - -- #12185: New script language for ocamltest. - (Damien Doligez with Florian Angeletti, Sébastien Hinderer, Gabriel Scherer, - review by Sébastien Hinderer and Gabriel Scherer) - -- #12371: ocamltest: fix recursive expansion of variables. - (Antonin Décimo, Damien Doligez, review by Sébastien Hinderer, - Damien Doligez, Gabriel Scherer, and Xavier Leroy) - -* #12497, #12613: Make ocamlc/ocamlopt fail with an error when no - input files are specified to build an executable. - (Antonin Décimo, review by Sébastien Hinderer) - -- #12576: ocamldep: various refactors. - (Antonin Décimo, review by Florian Angeletti, Gabriel Scherer, and Léo Andrès) - -- #12615: ocamldoc: get rid of the odoc_literate and odoc_todo generators. - (Sébaistien Hinderer, review by Gabriel Scherer and Florian Angeletti) - -- #12624: Use $XDG_CONFIG_DIRS in addition to $XDG_CONFIG_HOME when searching - for init.ml and use this to extend init.ml support to the toplevel when - running on Windows. - (David Allsopp, report by Jonah Beckford, review by Nicolás Ojeda Bär and - Antonin Décimo) - -- #12688: Setting the env variable `NO_COLOR` with an empty value no longer - has effects. Previously, setting `NO_COLOR` with any value, including - the empty value, would disable colors (unless `OCAML_COLOR` is also set). - After this change, the user must set `NO_COLOR` with an non-empty value - to disable colors. This reflects a specification clarification/change - from the upstream website at https://no-color.org. - (Favonia, review by Gabriel Scherer) - -- #12744: ocamltest: run tests in recursive subdirs more eagerly - (Nick Roberts, review by Nicolás Ojeda Bär) - -- #12901, 12908: ocamllex: add overflow checks to prevent generating incorrect - lexers; use unsigned numbers in the table encoding when possible. - (Vincent Laviron, report by Edwin Török, review by Xavier Leroy) - -### Manual and documentation: - -- #12338: clarification of the documentation of process related function in - the unix module regarding the first element of args and shell's pid. - (Christophe Raffalli, review by Florian Angeletti) - -- #12473: Document in runtime/memory.c our current understanding of - accesses to the OCaml heap from the C runtime code -- the problem - of hybrid programs mixing two memory models. - (Gabriel Scherer and Guillaume Munch-Maccagnoni, review by Olivier - Nicole and Xavier Leroy) - -- #12694: Document in runtime/tsan.c the TSan instrumentation choices and the - consequences with regard to the memory model. - (Olivier Nicole, review by Miod Vallat, Gabriel Scherer, Guillaume - Munch-Maccagnoni and Fabrice Buoro) - -- #12802: Add manual chapter about ThreadSanitizer support - (Olivier Nicole, review by Miod Vallat, Sebastien Hinderer, Fabrice Buoro, - Gabriel Scherer and KC Sivaramakrishnan) - -- #12819: Clarify which runtime interactions are allowed in custom ops - (Basile Clément, review by Guillaume Munch-Maccagnoni and Xavier Leroy) - -- #12840: manual: update runtime tracing chapter for custom events (ex #12335) - (Lucas Pluvinage, Sadiq Jaffer and Olivier Nicole, review by Gabriel Scherer, - David Allsopp, Tim McGilchrist and Thomas Leonard) - -- #13066, update OCAMLRUNPARAM documentation for the stack size parameter l - (Florian Angeletti, review by Nicolás Ojeda Bär, Tim McGilchrist, and - Miod Vallat) - -- #13078: update Format tutorial on structural boxes to mention alignment - questions. - (Edwin Török, review by Florian Angeletti) - -- #13092: document the existence of the `[@@poll error]` built-in attribute - (Florian Angeletti, review by Gabriel Scherer) - ### Compiler user-interface and warnings: +- #11989, #12246, RFC 31: New flag, -H, to allow for transitive dependencies + without including them in the initial environment. + (Chris Casinghino, François Bobot, and Gabriel Scherer, review by Leo White + and Stefan Muenzel, RFC by François Bobot) + + * #10613, #12405: Simplify the values used for the system variable (`system:` in `ocamlopt -config` or the `Config.system` constant). In particular, s390x and ppc64 now report "linux" instead of "elf"; all variants of 32-bit ARM on Linux @@ -493,11 +403,6 @@ OCaml 5.2.0 (David Allsopp, request by Kate Deplaix, review by Sébastien Hinderer and Xavier Leroy) -- #11989, #12246, RFC 31: New flag, -H, to allow for transitive dependencies - without including them in the initial environment. - (Chris Casinghino, François Bobot, and Gabriel Scherer, review by Leo White - and Stefan Muenzel, RFC by François Bobot) - - #12247: configure: --disable-ocamldebug can now be used instead of --disable-debugger (which remains available for compatibility) (Gabriel Scherer, review by Damien Doligez and Sébastien Hinderer) @@ -546,9 +451,125 @@ OCaml 5.2.0 * #12942: Fix an line ordering in some module inclusion error messages (Nick Roberts, review by Florian Angeletti, report by Carl Eastlund) +### Manual and documentation: + +- #12338: clarification of the documentation of process related function in + the unix module regarding the first element of args and shell's pid. + (Christophe Raffalli, review by Florian Angeletti) + +- #12473: Document in runtime/memory.c our current understanding of + accesses to the OCaml heap from the C runtime code -- the problem + of hybrid programs mixing two memory models. + (Gabriel Scherer and Guillaume Munch-Maccagnoni, review by Olivier + Nicole and Xavier Leroy) + +- #12456: Document the incompatibility between effects on the one + hand, and `caml_callback` and asynchronous callbacks (signal + handlers, finalisers, memprof callbacks...) on the other hand. + (Guillaume Munch-Maccagnoni, review by KC Sivaramakrishnan) + +- #12694: Document in runtime/tsan.c the TSan instrumentation choices and the + consequences with regard to the memory model. + (Olivier Nicole, review by Miod Vallat, Gabriel Scherer, Guillaume + Munch-Maccagnoni and Fabrice Buoro) + +- #12802: Add manual chapter about ThreadSanitizer support + (Olivier Nicole, review by Miod Vallat, Sebastien Hinderer, Fabrice Buoro, + Gabriel Scherer and KC Sivaramakrishnan) + +- #12819: Clarify which runtime interactions are allowed in custom ops + (Basile Clément, review by Guillaume Munch-Maccagnoni and Xavier Leroy) + +- #12840: manual: update runtime tracing chapter for custom events (ex #12335) + (Lucas Pluvinage, Sadiq Jaffer and Olivier Nicole, review by Gabriel Scherer, + David Allsopp, Tim McGilchrist and Thomas Leonard) + +- #13066, update OCAMLRUNPARAM documentation for the stack size parameter l + (Florian Angeletti, review by Nicolás Ojeda Bär, Tim McGilchrist, and + Miod Vallat) + +- #13078: update Format tutorial on structural boxes to mention alignment + questions. + (Edwin Török, review by Florian Angeletti) + +- #13092: document the existence of the `[@@poll error]` built-in attribute + (Florian Angeletti, review by Gabriel Scherer) + +### Tools: + +- #12340: testsuite: collect known issues with current -short-paths + implementation for existential types + (Florian Angeletti, Samuel Hym, review by Florian Angeletti and Thomas Refis) + +- #12147: ocamllex: Allow carriage returns at the end of line directives. + (SeungCheol Jung, review by Nicolás Ojeda Bär) + +- #12260: Fix invalid_argument on some external or module aliases in ocamlnat + (Fabian Hemmer, review by Vincent Laviron) + +- #12185: New script language for ocamltest. + (Damien Doligez with Florian Angeletti, Sébastien Hinderer, Gabriel Scherer, + review by Sébastien Hinderer and Gabriel Scherer) + +- #12371: ocamltest: fix recursive expansion of variables. + (Antonin Décimo, Damien Doligez, review by Sébastien Hinderer, + Damien Doligez, Gabriel Scherer, and Xavier Leroy) + +* #12497, #12613: Make ocamlc/ocamlopt fail with an error when no + input files are specified to build an executable. + (Antonin Décimo, review by Sébastien Hinderer) + +- #12576: ocamldep: various refactors. + (Antonin Décimo, review by Florian Angeletti, Gabriel Scherer, and Léo Andrès) + +- #12615: ocamldoc: get rid of the odoc_literate and odoc_todo generators. + (Sébaistien Hinderer, review by Gabriel Scherer and Florian Angeletti) + +- #12624: Use $XDG_CONFIG_DIRS in addition to $XDG_CONFIG_HOME when searching + for init.ml and use this to extend init.ml support to the toplevel when + running on Windows. + (David Allsopp, report by Jonah Beckford, review by Nicolás Ojeda Bär and + Antonin Décimo) + +- #12688: Setting the env variable `NO_COLOR` with an empty value no longer + has effects. Previously, setting `NO_COLOR` with any value, including + the empty value, would disable colors (unless `OCAML_COLOR` is also set). + After this change, the user must set `NO_COLOR` with an non-empty value + to disable colors. This reflects a specification clarification/change + from the upstream website at https://no-color.org. + (Favonia, review by Gabriel Scherer) + +- #12744: ocamltest: run tests in recursive subdirs more eagerly + (Nick Roberts, review by Nicolás Ojeda Bär) + +- #12901, 12908: ocamllex: add overflow checks to prevent generating incorrect + lexers; use unsigned numbers in the table encoding when possible. + (Vincent Laviron, report by Edwin Török, review by Xavier Leroy) ### Internal/compiler-libs changes: +- #12508 : Add compiler-side support for project-wide occurrences in Merlin, by + generating index tables of all identifier occurrences. This extra data in .cmt + files is only added when the new flag -bin-annot-occurrences is passed. + (Ulysse Gérard, Nathanaëlle Courant, suggestions by Gabriel Scherer and Thomas + Refis, review by Florian Angeletti, Gabriel Scherer and Thomas Refis) + +- #12236, #12386, #12391, #12496, #12673: Use syntax as sole determiner of arity + This changes function arity to be based solely on the source program's + parsetree. Previously, the heuristic for arity had more subtle heuristics + that involved type information about patterns. Function arity is important + because it determines when a pattern match's effects run and is an input + into the fast path for function application. + + This change affects tooling: it changes the function constructs in parsetree + and typedtree. + + See https://github.com/ocaml/RFCs/pull/32 for the original RFC. + + (Nick Roberts; review by Richard Eisenberg, Leo White, and Gabriel Scherer; + RFC by Stephen Dolan) + + - #12639: parsing: Attach a location to the RHS of Ptyp_alias and improve the 'alias type mismatch' error message. (Jules Aguillon, review by Florian Angeletti) @@ -583,21 +604,6 @@ OCaml 5.2.0 in Typecore in favor of local mutable state. (Nick Roberts, review by Takafumi Saikawa) -- #12236, #12386, #12391, #12496, #12673: Use syntax as sole determiner of arity - This changes function arity to be based solely on the source program's - parsetree. Previously, the heuristic for arity had more subtle heuristics - that involved type information about patterns. Function arity is important - because it determines when a pattern match's effects run and is an input - into the fast path for function application. - - This change affects tooling: it changes the function constructs in parsetree - and typedtree. - - See https://github.com/ocaml/RFCs/pull/32 for the original RFC. - - (Nick Roberts; review by Richard Eisenberg, Leo White, and Gabriel Scherer; - RFC by Stephen Dolan) - - #12542: Minor bugfix to #12236: restore dropped call to `instance` (Nick Roberts, review by Jacques Garrigue) @@ -650,12 +656,6 @@ OCaml 5.2.0 - #12764: Move all installable headers in `caml/` sub-directories. (Antonin Décimo, review by Gabriel Scherer and David Allsopp) -- #12508 : Add compiler-side support for project-wide occurrences in Merlin, by - generating index tables of all identifier occurrences. This extra data in .cmt - files is only added when the new flag -bin-annot-occurrences is passed. - (Ulysse Gérard, Nathanaëlle Courant, suggestions by Gabriel Scherer and Thomas - Refis, review by Florian Angeletti, Gabriel Scherer and Thomas Refis) - - #12914: Slightly change the s390x assembly dialect in order to build with Clang's integrated assembler. (Miod Vallat, review by Gabriel Scherer) @@ -888,6 +888,10 @@ OCaml 5.2.0 - #13094: Fix undefined behavior of left-shifting a negative number. (Antonin Décimo, review by Miod Vallat and Nicolás Ojeda Bär) +- #13130: minor fixes to pprintast for raw identifiers and local module open + syntax for types. + (Chet Murthy, review by Gabriel Scherer) + OCaml 5.1.1 (8 December 2023) ---------------------------- -- 2.44.0