diff --git a/ocaml/_doc-dir/Changes b/ocaml/_doc-dir/Changes new file mode 100644 index 00000000..61509659 --- /dev/null +++ b/ocaml/_doc-dir/Changes @@ -0,0 +1,13681 @@ +OCaml 5.1.1 (8 December 2023) +---------------------------- + +### Standard library: + +* #12562, #12734, #12783: Remove the `Marshal.Compression` flag to the + `Marshal.to_*` functions introduced in 5.1 by #12006, as it cannot + be implemented without risking to link -lzstd with all + ocamlopt-generated executables. The compilers are still able to use + ZSTD compression for compilation artefacts. + (Xavier Leroy and David Allsopp, report by Kate Deplaix, review by + Nicolás Ojeda Bär, Kate Deplaix, and Damien Doligez). + +### Bug fixes: + +- #11800, #12707: fix an assertion race condition in `install_backup_thread` + (Jan Midtgaard, review by Gabriel Scherer) + +- #12318: GC: simplify the meaning of custom_minor_max_size: blocks with + out-of-heap memory above this limit are now allocated directly in + the major heap. + (Damien Doligez, report by Stephen Dolan, review by Gabriel Scherer) + +- #12439: Finalize and collect dead custom blocks during minor collection + (Damien Doligez, review by Xavier Leroy, Gabriel Scherer and KC + Sivaramakrishnan) + +- #12486, #12535: Fix delivery of unhandled effect exceptions on amd64 with + --enable-frame-pointers + (Miod Vallat, report by Jan Midtgaard, review by Gabriel Scherer) + +- #12581, #12609: Fix error on uses of packed modules outside their pack + to correctly handle nested packs + (Vincent Laviron, report by Javier Chávarri, review by Pierre Chambart) + +- #12590, #12595: Move `caml_collect_gc_stats_sample` in + `caml_empty_minor_heap_promote` before barrier arrival. + (B. Szilvasy, review by Gabriel Scherer) + +- #12623, fix the computation of variance composition + (Florian Angeletti, report by Vesa Karvonen, review by Gabriel Scherer) + +- #12645, #12649 fix error messages for cyclic type definitions in presence of + the `-short-paths` flag. + (Florian Angeletti, report by Vesa Karvonen, review by Gabriel Scherer) + +- #12712, #12742: fix an assertion boundary case in `caml_reset_young_limit` + (Jan Midtgaard, review by Guillaume Munch-Maccagnoni) + +- #12713, #12715: disable common subexpression elimination for atomic loads + (Gabriel Scherer and Vincent Laviron, + review by Vincent Laviron, KC Sivaramakrishnan and Xavier Leroy, + report by Vesa Karvonen and Carine Morel) + +- #12757: Fix ocamlnat (native toplevel) by registering frametables correctly + (Stephen Dolan, Nick Barnes and Mark Shinwell, + review by Vincent Laviron and Sébastien Hinderer) + +- #12791: `extern` is applied to definitions of `caml_builtin_cprim` + and `caml_names_of_builtin_cprim` when linking bytecode '-custom' + executables with a C++ linker. + (Shayne Fletcher, review by Antonin Décimo and Xavier Leroy) + + +OCaml 5.1.0 (14 September 2023) +------------------------------- + +### Restored backends + +- #11418, #11708: RISC-V multicore support. + (Nicolás Ojeda Bär, review by KC Sivaramakrishnan) + +- #11712, #12258, #12261: s390x / IBM Z multicore support: + OCaml & C stack separation; dynamic stack size checks; fiber and + effects support. + (Aleksei Nikiforov, with help from Vincent Laviron and Xavier Leroy, + additional suggestions by Luc Maranget, + review by the same and KC Sivaramakrishnan) + +- #11642: Restore Cygwin port. Add GC messages for address space reservations + when OCAMLRUNPARAM option v includes 0x1000. + (David Allsopp, review by Xavier Leroy, Guillaume Munch-Maccagnoni + and Gabriel Scherer) + +### Standard library: + +- #12006, #12064: Add `Marshal.Compression` flag to `Marshal.to_*` functions. + When this flag is explicitly set, marshaled data is compressed using ZSTD. + On some practical examples, the marshalled output became three times smaller + at no noticeable cost on the marshalling time. + (Xavier Leroy, review by Edwin Török and Gabriel Scherer, fix by Damien + Doligez) + +- #10464: Add List.is_empty. + (Craig Ferguson, review by David Allsopp) + +- #11848: Add `List.find_mapi`, + `List.find_index: ('a -> bool) -> 'a list -> int option`, + `Seq.find_mapi`, `Seq.find_index`, `Array.find_mapi`, `Array.find_index`, + `Float.Array.find_opt`, `Float.Array.find_index`, `Float.Array.find_map`, + `Float.Array.find_mapi`. + (Sima Kinsart, review by Daniel Bünzli and Nicolás Ojeda Bär) + +- #11410: Add Set.to_list, Map.to_list, Map.of_list, + `Map.add_to_list: key -> 'a -> 'a list t -> 'a list t`. + (Daniel Bünzli, review by Nicolás Ojeda Bär and Gabriel Scherer) + +- #11836, #11837: Add `Array.map_inplace`, `Array.mapi_inplace`, + `Float.Array.mapi_inplace` and `Float.Array.mapi_inplace`. + (Léo Andrès, review by Gabriel Scherer, KC Sivaramakrishnan and + Nicolás Ojeda Bär) + +- #10967: Add Filename.temp_dir. + (David Turner, review by Anil Madhavapeddy, Valentin Gatien-Baron, Nicolás + Ojeda Bär, Gabriel Scherer, and Daniel Bünzli) + +- #11246: Add "hash" and "seeded_hash" functions to Bool, Int, Char, Float, + Int32, Int64, and Nativeint. + (Nicolás Ojeda Bär, review by Xavier Leroy and Gabriel Scherer) + +- #11488: Add `Mutex.protect: Mutex.t -> (unit -> 'a) -> 'a` + for resource-safe critical sections protected by a mutex. + (Simon Cruanes, review by Gabriel Scherer, Xavier Leroy, + Guillaume Munch-Maccagnoni) + +- #11581: Add type equality witness + `type (_, _) eq = Equal: ('a, 'a) eq` + in a new module Stdlib.Type. + (Nicolás Ojeda Bär, review by Daniel Bünzli, Jacques Garrigue, Florian + Angeletti, Alain Frisch, Gabriel Scherer, Jeremy Yallop and Xavier Leroy) + +- #11843: Add `In_channel.input_lines` and `In_channel.fold_lines`. + (Xavier Leroy, review by Nicolás Ojeda Bär and Wiktor Kuchta). + +- #11856, #11859: Using TRMC, the following `Stdlib` functions are now + tail-recursive: + Stdlib.(@), List.append, + List.concat_map. + (Jeremy Yallop, review by Daniel Bünzli, Anil Madhavapeddy, Nicolás Ojeda Bär, + Gabriel Scherer, and Bannerets) + +- #11362, #11402: Using TRMC, the following `Stdlib` functions are now + tail-recursive: + List.map, List.mapi, List.map2, + List.filter, List.filteri, List.filter_map, + List.init, + List.of_seq. + (Nicolás Ojeda Bär, review by Xavier Leroy and Gabriel Scherer) + + +- #11878, #11965: Prevent seek_in from marking buffer data as valid after + closing the channel. This could lead to inputting uninitialized bytes. + (Samuel Hym, review by Xavier Leroy and Olivier Nicole) + +- #11128: Add In_channel.isatty, Out_channel.isatty. + (Nicolás Ojeda Bär, review by Gabriel Scherer and Florian Angeletti) + +- #10859: Add `Format.pp_print_iter` and `Format.pp_print_array`. + (Léo Andrès and Daniel Bünzli, review by David Allsopp and Hugo Heuzard) + +- #10789: Add `Stack.drop` + (Léo Andrès, review by Gabriel Scherer) + +* #10899: Change Stdlib.nan from signaling NaN to quiet NaN. + (Greta Yorsh, review by Xavier Leroy, Guillaume Melquiond and + Gabriel Scherer) + +- #11026, #11667, #11858: Rename the type of the accumulator + of fold functions to 'acc: + fold_left : ('acc -> 'a -> 'acc) -> 'acc -> 'a list -> 'acc + fold_right : ('a -> 'acc -> 'acc) -> 'a list -> 'acc -> 'acc + fold_left_map : ('acc -> 'a -> 'acc * 'b) -> 'acc -> 'a list -> 'acc * 'b list + ... + (Valentin Gatien-Baron and Francois Berenger, + review by Gabriel Scherer and Nicolás Ojeda Bär) + +- #11354: Hashtbl.find_all is now tail-recursive. + (Fermín Reig, review by Gabriel Scherer) + +- #11500: Make Hashtbl.mem non-allocating. + (Simmo Saan, review by Nicolás Ojeda Bär) + +- #11412: Add Sys.is_regular_file + (Xavier Leroy, review by Anil Madhavapeddy, Nicolás Ojeda Bär, David Allsopp) + +- #11322, #11329: serialization functions Random.State.{of,to}_binary_string + between Random.State.t and string + (Gabriel Scherer, report by Yotam Barnoy, + review by Daniel Bünzli, Damien Doligez, Hugo Heuzard and Xavier Leroy) + +- #11830: Add Type.Id with + `val provably_equal : 'a Type.Id.t -> 'b Type.Id.t -> ('a, 'b) Type.eq option` + (Daniel Bünzli, review by Jeremy Yallop, Gabriel Scherer, Wiktor Kuchta, + Nicolás Ojeda Bär) + +- #12184, #12320: Sys.rename Windows fixes on directory corner cases. + (Jan Midtgaard, review by Anil Madhavapeddy) + +* #11565: Enable -strict-formats by default. Some incorrect format + specifications (for `printf`) where silently ignored and now fail. + Those new failures occur at compile-time, except if you use advanced + format features like `%(...%)` that parse format strings dynamically. + Pass -no-strict-formats to revert to the previous lenient behavior. + (Nicolás Ojeda Bär, review by David Allsopp) + +### Installation size + + Specific efforts have been made during this release to reduce the filesystem +size of installed artifacts of the compiler distribution. +The installation size of 5.1 is 272 MiB compared to 521 MiB for 5.0. +Some of those changes will benefit all OCaml packages. + +- ocaml/RFCs#23, #12006: use compressed marshaled format from #12006 for .cmi, + .cmt, .cmti files, and for debug info in .cmo and .cma files, resulting in + major reduction in size. + (Xavier Leroy, review by Edwin Török and Gabriel Scherer, + RFC by Simon Cruanes) + +- #11981: Reduce size of OCaml installations by removing debugging information + from installed bytecode executables. It is no longer possible to + run ocamldebug over these installed bytecode executables, nor to get + exception backtraces for them. + (Xavier Leroy, review by David Allsopp, report by Fabrice Le Fessant) + +* #11993: install only bytecode executables for the `ocamlmklib`, `ocamlcmt`, + `ocamlprof`, `ocamlcp`, `ocamloptp`, and `ocamlmktop` tools, but no + native-code executables. A tool like `ocamlmklib` for example is now + installed directly to `$BINDIR/ocamlmklib`; `ocamlmklib.byte` and + `ocamlmklib.opt` are no longer installed to `$BINDIR`. + (Xavier Leroy, review by Gabriel Scherer) + +### Runtime system: + +- #11589, #11903: Modify the GC pacing code to make sure the GC keeps + up with allocations in the presence of idle domains. + (Damien Doligez and Stephen Dolan, report by Florian Angeletti, + review by KC Sivaramakrishnan and Sadiq Jaffer) + +- #11743: Speed up weak array operations + (KC Sivaramakrishnan, review by François Bobot and Sadiq Jaffer) + +- #12131: Simplify implementation of weak hash sets, fixing a + performance regression. (Nick Barnes, review by François Bobot, + Alain Frisch and Damien Doligez). + +- #11474, #11998, #12065: Add support for user-defined events in the runtime + event tracing system. + (Lucas Pluvinage, review by Sadiq Jaffer, Guillaume Munch-Maccagnoni, + Enguerrand Decorne, Gabriel Scherer and Anil Madhavapeddy) + +- #11827, #12249: Restore prefetching for GC marking + (Fabrice Buoro and Stephen Dolan, review by Gabriel Scherer and Sadiq Jaffer) + +- #11144: Restore frame-pointers support for amd64 + (Fabrice Buoro, review by Frederic Bour and KC Sivaramakrishnan) + +- #11935: Load frametables of dynlink'd modules in batch + (Stephen Dolan, review by David Allsopp and Guillaume Munch-Maccagnoni) + +- #11284, #12525: Use compression of entries scheme when pruning mark stack. + Can decrease memory usage for some workloads, otherwise should be + unobservable. + (Tom Kelly, review by Sabine Schmaltz, Sadiq Jaffer and Damien Doligez) + +* #11865, #11868, #11876: Clarify that the operations of a custom + block must never access the OCaml runtime. The previous + documentation only mentioned the main illicit usages. In particular, + since OCaml 5.0, it is no longer safe to call + `caml_remove_global_root` or `caml_remove_generational_global_root` + from within the C finalizer of a custom block, or within the + finalization function passed to `caml_alloc_final`. As a workaround, + such a finalization operation can be registered with `Gc.finalize` + instead, which guarantees to run the finalizer at a safe point. + (Report by Timothy Bourke, discussion by Yotam Barnoy, Timothy + Bourke, Sadiq Jaffer, Xavier Leroy, Guillaume Munch-Maccagnoni, and + Gabriel Scherer) + +- #12130: Fix multicore crashes with weak hash sets. Fixes #11934. + (Nick Barnes, review by François Bobot) + +- #12099: Add ocamlrund option, -events, to produce a trace of + debug events during bytecode interpretation. Fixes #12098. + (Richard L Ford, review by Gabriel Scherer) + +- #12001: Fix book keeping for last finalisers during the minor cycle + (KC Sivaramakrishnan and Enguerrand Decorne, report by Guillaume Bury + and Vincent Laviron, review by Sadiq Jaffer and KC Sivaramakrishnan) + +- #11919: New runtime events counters for major heap stats and minor heap + resizing. + (Sadiq Jaffer, review by Gabriel Scherer and David Allsopp) + +- #11287, #11872, #11955: Clean up reserved header bits (once used for + Spacetime profiling). + (Nick Barnes, review by Gabriel Scherer and Damien Doligez) + +- #11750: Decouple major slice from minor GC. + (KC Sivaramakrishnan, review by Sadiq Jaffer, Guillaume Munch-Maccagnoni and + Damien Doligez) + +- #11796: protect lazy computation of code fragment digest by a mutex. + This makes the thread sanitizer happier, and avoids duplicating + the hashing work. + (Gabriel Scherer, review by Xavier Leroy, report by Olivier Nicole) + +- #11137: new `Unsafe_store_tag(val, new_tag)` macro to stop using + `Tag_val(val)` as lvalue. + (Gabriel Scherer, review by Xavier Leroy, Guillaume Munch-Maccagnoni + and Nicolás Ojeda Bär) + +- #11880: Restore the correct sigmask in systhreads. + (Christiano Haesbaert, review by Guillaume Munch-Maccagnoni and + Sébastien Hinderer) + +- #11881: Fix thread-unsafety of registration of operations for "custom" + values. + (Guillaume Munch-Maccagnoni, review by Gabriel Scherer and KC + Sivaramakrishnan) + +- #11980: fix quadratic behavior in natdynlink by using a STW section + for frame-descriptor updates. + (Gabriel Scherer, review by Sadiq Jaffer, report by André Maroneze + for Frama-C and Guillaume Melquiond for Coq) + +- #12121: unrooted implementations of caml_callback*_exn + (Gabriel Scherer, review by KC Sivaramakrishnan and Xavier Leroy) + +- #3921, #12039, #12128: poll for signals in long-running polymorphic + comparisons. + (B. Szilvasy, Gabriel Scherer and Xavier Leroy, review by + Stefan Muenzel, Guillaume Munch-Maccagnoni and Damien Doligez) + +- #12231: Support MinGW-w64 11.0 winpthreads library, where the macro + to set up to get flexdll working changed + (David Allsopp and Samuel Hym, light review by Xavier Leroy) + +- #12491, #12493, #12500, #12754: Do not change GC pace when creating + sub-arrays of bigarrays + (Xavier Leroy, report by Ido Yariv, analysis by Gabriel Scherer, + review by Gabriel Scherer and Fabrice Buoro) + +### Language features: + +* #11694: Add short syntax for generative functor types `() -> ...` + (Jeremy Yallop, review by Gabriel Scherer, Nicolás Ojeda Bär, + Jacques Garrigue) + + +* #11457: Remove old polymorphic variant syntax. + With ``type t = [ `A | `B ]``, one could use the syntax `#t` in types, + where it means the same thing as `[< t]`, and in patterns, where it means + ``(`A | `B)``. The use of `#t` in types for polymorphic variants + was deprecated since 2001, and is now removed. The syntax remains available + in patterns, or for objects -- when `t` is a class type. + (Stefan Muenzel, review by Gabriel Scherer and Jacques Garrigue) + +* #11984: Add dedicated syntax for generative functor application. + Previously, OCaml did not distinguish between `F ()` and + `F (struct end)`, even though the latter looks applicative. Instead, + the decision between generative and applicative functor application + was made based on the type of `F`. With this patch, we now distinguish + these two application forms; writing `F (struct end)` for a generative + functor leads to new warning 73. + (Frederic Bour and Richard Eisenberg, review by Florian Angeletti) + + +- #9975, #11365: Make empty types (`type t = |`) immediate. + (Antal Spector-Zabusky, review by Gabriel Scherer) + +### Type system: + +* #6941, #11187, #12483: prohibit using classes through recursive modules + inheriting or including a class belonging to a mutually-recursive module + would previous behave incorrectly, and now results in a clean error. + (Leo White, review by Gabriel Scherer and Florian Angeletti) + +* #12189, #12211: anonymous row variables in explicitly polymorphic type + annotation, e.g. `'a. [< X of 'a ] -> 'a`, are now implicitly + universally quantified (in other words, the example above is now read + as `'a 'r. ([< X of 'a ] as 'r) -> 'a`). + (Florian Angeletti and Gabriel Scherer, review by Jacques Garrigue) + +### Code generation and optimizations: + +- #11967: Remove traces of Obj.truncate, which allows some mutable + loads to become immutable. + (Nick Barnes, review by Vincent Laviron and KC Sivaramakrishnan) + +- #9945, #10883: Turn boolean-result float comparisons into primitive operations + Uses the architecture's elementary operations for float comparisons, + when available, rather than branching and then setting the return value. + (Stefan Muenzel, review by Stephen Dolan, Alain Frisch and Vincent Laviron) + +- #8998, #11321, #11430: change mangling of OCaml long identifiers + from `camlModule__name_NNN` to `camlModule.name_NNN`. The previous + mangling schema, using `__`, was ambiguous. + (Xavier Leroy, report by sliquister and Michael Bacarella, + review by Gabriel Scherer) + +- #10834: The -safer-matching option disables type-based optimizations of + pattern-matching compilation. This allows to produce a match failure if + a pattern-matching was wrongly assumed to be exhaustive. Since the + exhaustiveness check for GADTs has had bugs in the past, it may be + useful if you need extra security with GADTs. + (Jacques Garrigue, review by Gabriel Scherer) + +- #11102: Speed up register allocation by permanently spilling registers + (Stephen Dolan, review by Xavier Leroy) + +- #11383: Restrict the local function optimisation to forbid moving code + inside a sub-function + (Vincent Laviron, review by Gabriel Scherer) + +- #11686: Better spilling heuristic for the Linear Scan allocator for more + efficient stack usage. + (Nicolás Ojeda Bär, Gabriel Scherer, Alain Frisch, review by Gabriel Scherer, + Alain Frisch and Nathanaëlle Courant) + +- #11904: Remove arm, i386 native-code backends that were already + disabled at configuration time. + (Nicolás Ojeda Bär, review by Stephen Dolan, Anil Madhavapeddy, and Xavier + Leroy) + +- #11134: Optimise 'include struct' in more cases + (Stephen Dolan, review by Leo White and Vincent Laviron) + +### Other libraries: + +- #11374: Remove pointer cast to a type with stricter alignment requirements + in Windows implementation of Unix.gettimeofday. Windows implementations of + caml_unix_map_file, caml_unix_lseek and caml_unix_lseek_64 now release the + runtime lock. Windows implementation of caml_unix_lockf modernised and + simplified. Where possible, 64 bit integers are used instead of LARGE_INTEGER + structs. + (David Allsopp, review by Jonah Beckford and Xavier Leroy) + +- #11475: Make Unix terminal interface bindings domain-safe + (Olivier Nicole and Xavier Leroy, review by Xavier Leroy) + +- #11775: Unix.write on a non-blocking socket under Windows will return normally + if the write blocks after some data has already been written (as otherwise + there is no way of knowing how much data has been written before + blocking). The same behaviour was already present under Unix. + (Nicolás Ojeda Bär, review by David Allsopp) + +* #11991: Unix on Windows: map ERROR_TOO_MANY_LINKS to EMLINK. + (Nicolás Ojeda Bär) + +- #12067: Document Windows specific meanings of `Unix.process_status` + type + (Samuel Hym, review by David Allsopp) + +- #12072: Document and test that Sys.rename works over directories too + (Jan Midtgaard, review by Anil Madhavapeddy and Xavier Leroy) + +### Tools: + +- #11889, #11978: ocamldoc: handle injectivity annotations and wildcards in type + parameters. + (Florian Angeletti, report by Wiktor Kuchta, review by Jules Aguillon) + +- #11787: Fix GDB scripts to work with OCaml 5's heap layout. (Nick + Barnes) + +- #11772: fix ocamlyacc's handling of raw string literals + (Demi Marie Obenour) + +- #9290: Add a directive to switch off debugging in toplevel. + This allows to see optimized bytecode with -dlambda. + (Jacques Garrigue, review by Gabriel Scherer) + +- #11166: ocamllex: the union of two character sets "cset1 | cset2" can now be + used in any context where a character set is expected. + (Nicolás Ojeda Bär, Martin Jambon, review by Sébastien Hinderer) + +- #11718: ocamlyacc: OCaml-style comments are now supported, in addition to + the C-style comments already supported. The syntax is the same as that used + in OCaml code. + (Demi Marie Obenour, review by Damien Doligez) + +- #11728: ocamlyacc: generate line directives for %type declarations + (Demi Marie Obenour, review by Damien Doligez) + +- #11773: ocamlyacc: Do not allow quoted literals (such as 'a' or "bc") + in a token name or %type declaration. Previously such literals were + accepted by ocamlyacc, but produced malformed OCaml that was rejected + by the compiler. + (Demi Marie Obenour, review by Gabriel Scherer) + +- #11774: ocamlyacc: fail if there is an I/O error + (Demi Marie Obenour, review by Gabriel Scherer) + +- #11973: Add support for postfixed mingw host triplets + (Romain Beauxis) + +- #12165: ocamldoc, use standard doctype to avoid quirk mode. + (Florian Angeletti, review by Gabriel Scherer) + +### Manual and documentation: + +- #11476: Add examples in documentation of Hashtbl, Queue, Atomic, Format + (Simon Cruanes, review by Yotam Barnoy, Gabriel Scherer, Daniel Bünzli, + Ulugbek Abdullaev, and Nicolás Ojeda Bär) + +- #11883, #11884: Update documentation for In_channel and Out_channel + with examples and sections to group related functions. + (Kiran Gopinathan, review by Daniel Bünzli and Xavier Leroy) + + +- #12095, #12097: Put the sample code of the user's manual and reference + documentation of the standard library under the CC0 1.0 Universal + (CC0 1.0) Public Domain Dedication license. + +- #11892: Document the semantic differences of Unix.exec* between Unix and + Windows. + (Boris Yakobowski, review by Daniel Bünzli, Gabriel Scherer and Nicolás Ojeda + Bär) + +- #9430, #11291: Document the general desugaring rules for binding operators. + (Gabriel Scherer, review by Nicolás Ojeda Bär) + +- #11481: Fix the type of Unix.umask to Unix.file_perm -> Unix.file_perm + (Favonia, review by Sébastien Hinderer) + +- #11514: Document ocamltest builtin variables and actions + (Olivier Nicole, review by Sébastien Hinderer) + +- #11676: Fix missing since annotation in the `Sys` and `Format` modules + (Github user Bukolab99, review by Florian Angeletti) + +- #12028: Update format documentation to make it clearer that + `pp_print_newline` flushes its newline + (Florian Angeletti, review by Gabriel Scherer) + +- #12201: in the tutorial on modules, replace priority queue example by + a simpler example based on FIFO queues. + (Xavier Leroy, review by Anil Madhavapeddy and Nicolás Ojeda Bär). + +- #12352: Fix a typo in the documentation of Arg.write_arg + (Christophe Raffalli, review by Florian Angeletti) + +- #7179, #11894: correct the description of CAMLreturn and CAMLreturn0 in + the Interfacing C page and memory.h file. + (Dong An, review by Guillaume Munch-Maccagnoni and Olivier Nicole ) + +### Compiler user-interface and warnings: + +- #10647: Show hints for the "undefined global" error in the toplevel + (Wiktor Kuchta, review by Gabriel Scherer) + +- #12116: Don't suggest to insert a semicolon when the type is not unit + (Jules Aguillon, review by Florian Angeletti) + +- #11679: Improve the error message about too many arguments to a function + (Jules Aguillon, review by Gabriel Scherer and Florian Angeletti) + +- #10009: Improve the error reported by mismatched struct/sig and =/: in module + and module type bindings. + (Jules Aguillon, review by Gabriel Scherer) + +- #11530: Include kinds in kind mismatch error message. + "Error: This variant or record definition does not match that of type M.t + The original is abstract, but this is a record". + (Leonhard Markert, review by Gabriel Scherer and Florian Angeletti) + +- #11646: Add colors to error message hints. + (Christiana Anthony, review by Florian Angeletti) + +- #11235, #11864: usage warnings for constructors and fields can now be disabled + on field-by-field or constructor-by-constructor basis + (Florian Angeletti, review by Gabriel Scherer) + +- #11888: Improve the error message when type variables cannot be deduced from + the type parameters: + Before: + "Error: In this definition, a type variable cannot be deduced + from the type parameters." + After: + "Error: In the GADT constructor + T : 'a -> 'a s t + the type variable 'a cannot be deduced from the type parameters." + (Stefan Muenzel, review by Florian Angeletti and Gabriel Scherer) + + +- #10818: Preserve integer literal formatting in type hint. + (Leonhard Markert, review by Gabriel Scherer and Florian Angeletti) + +- #11338: Turn some partial application warnings into hints. + (Leo White, review by Stephen Dolan) + +- #10931: Improve warning 14 (illegal backslash) with a better explanation + of the causes and how to fix it. + (David Allsopp, Florian Angeletti, Lucas De Angelis, Gabriel Scherer, + review by Nicolás Ojeda Bär, Florian Angeletti, David Allsopp and + Gabriel Scherer) + +- #10911: Improve the location reported by parenthesized assert expressions + (Fabian Hemmer, review by Gabriel Scherer) + +- #1391, #7645, #3922: Add an early error when compiling different + modules with mismatching -for-pack + (Pierre Chambart and Vincent Laviron, review by Mark Shinwell) + +- #11297: Report "unclosed" error when "done" is missing in a "do .. done" + construct. + (Nicolás Ojeda Bär, review by Gabriel Scherer) + +- #11635, #5461, #10564: turn warning 31 (Module_linked_twice) into a hard error + for ocamlc — this was already an error with ocamlopt. + (Hugo Heuzard, review by Valentin Gatien-Baron and Gabriel Scherer) + +- #11653: Add the -no-absname option to ocamlc, ocamlopt and ocamldep. + (Abiola Abdulsalam, review by Sébastien Hinderer and Florian Angeletti) + +- #11696: Add the -no-g option to ocamlc and ocamlopt. + (Abiola Abdulsalam, review by Sébastien Hinderer, Nicolás Ojeda Bär and + Florian Angeletti) + +- #11722: clearer error messages on non-well-founded type definitions + (Gabriel Scherer, review by Jacques Garrigue) + +- #11819: make the `native_compiler` and `native_dynlink` configuration + variables available through ocamlc -config. + (Sébastien Hinderer, review by Gabriel Scherer and David Allsopp) + +- #8602, #11863: Add -stop-after lambda flag option + (Douglas Smith and Dmitrii Kosarev, review by Gabriel Scherer) + +- #11910: Simplify naming convention for shadowed or ephemeral identifiers in + error messages (eg: `Illegal shadowing of included type t/2 by t`) + (Florian Angeletti, review by Jules Aguillon) + +- #12024: insert a blank line between separate compiler messages + (Gabriel Scherer, review by Florian Angeletti, report by David Wong) + +- #12088, #9265, #11949: ocamldebug: fix confusing repeating behavior + on blank lines within source scripts + (Damien Doligez, review by Gabriel Scherer, report by Gaëtan Gilbert) + +- #12107: use aliases to mark weak row variables: `_[< ... ]`, `< _..>`, `_#ct` + are now rendered as `[< ...] as '_weak1`, `< .. > as '_weak1`, + and `#ct as '_weak1`. + (Florian Angeletti, suggestion by Stefan Muenzel, review by Gabriel Scherer) + +- #12051: Improve the error messages when type variables cannot be generalized + (Stefan Muenzel, review by Florian Angeletti) + +* #12094: Trigger warning 5 (ignored-partial-application) when the scrutinee of + a pattern matching is of arrow type and all cases match wildcard or exception + patterns. + (Nicolás Ojeda Bär, review by Gabriel Scherer) + +### Internal/compiler-libs changes: + +- #11018, #11869: Clean up Types.Variance, adding a description of + the lattice used, and defining explicitly composition. + (Jacques Garrigue, review by Gabriel Scherer and Jeremy Yallop) + +- #11536: Introduce wrapper functions for level management + ([Ctype.with_level], etc) and for type variable scoping + ([Typetexp.with_local_type_variable_scope]). + The older API ([Ctype.(begin_def,end_def)], [Typetexp.(narrow,widen)], etc.) + is now removed. + (Jacques Garrigue and Takafumi Saikawa, review by Gabriel Scherer) + +- #11601, #11612, #11628, #11613, #11623, #12120 : Clean up some + global state handling in emitcode, bytepackager, bytegen, + bytesections, spill. + (Hugo Heuzard, Stefan Muenzel, review by Vincent Laviron, Gabriel Scherer + and Nathanaëlle Courant) + +- #12119, #12188, #12191: mirror type constraints on value binding in the + parsetree: + the constraint `typ` in `let pat : typ = exp` is now directly stored + in the value binding node in the parsetree. + (Florian Angeletti, review by Richard Eisenberg) + +- #11912: Refactoring handling of scoped type variables + (Richard Eisenberg, review by Gabriel Scherer and Florian Angeletti) + + +- #11691, #11706: use __asm__ instead of asm for strict ISO C conformance + (Xavier Leroy, report by Gregg Reynolds , review by Sadiq Jaffer) + +- #11764: add prototypes to old-style C function definitions and declarations + (Antonin Décimo, review by Xavier Leroy) + +- #11693: Remove use of C99 Variable Length Arrays (VLAs) in the runtime. + (David Allsopp, review by Xavier Leroy, Guillaume Munch-Maccagnoni, + Stefan Muenzel and Gabriel Scherer) + +- #12138: Generalise interface for BUILD_PATH_PREFIX_MAP mapping. + Absolute paths are now rewritten too. + (Richard L Ford, suggestions and review by Gabriel Scherer) + +- #10512: explain the compilation strategy for switches on constructors + (Gabriel Scherer, review by Vincent Laviron) + +- #11990: Improve comments and macros around frame descriptors. + (Nick Barnes, review by Gabriel Scherer) + +- #11847, #11849, #11851, #11898: small refactorings in the type checker + (Gabriel Scherer, review by Nicolás Ojeda Bär) + +- #11027: Separate typing counter-examples from type_pat into retype_pat; + type_pat is no longer in CPS. + (Jacques Garrigue and Takafumi Saikawa, review by Gabriel Scherer) + +- #11286, #11515: disambiguate identifiers by using how recently they have + been bound in the current environment + (Florian Angeletti, review by Gabriel Scherer) + +- #11364: Allow `make -C testsuite promote` to take `TEST` and `LIST` variables + (Antal Spector-Zabusky, review by Gabriel Scherer and David Allsopp) + +- #11446: document switch compilation (lambda/switch.ml) + (Gabriel Scherer, review by Luc Maranget and Vincent Laviron) + +- #11568: Encode inline record types in Path.t + (Leo White and Hyunggyu Jang, review by Gabriel Scherer) + +- #11569: Remove hash type encoding + (Hyunggyu Jang, review by Gabriel Scherer and Florian Angeletti) + +- #11627: use return values instead of globals for linear scan intervals + (Stefan Muenzel, review by Nicolás Ojeda Bär) + +- #11634: Dll.open_dll now properly handles opening for execution while already + opened for checking + (Hugo Heuzard, review by Nicolás Ojeda Bär) + +* #11745, #12358: Debugger and toplevels: embed printer types rather than + reading their representations from topdirs.cmi at runtime. + This change also removes the ocamlmktop initialization module introduced + in #11382 which was no longer useful. + This change breaks toplevel scripts relying on the visibility of `Topdirs` + in the initial toplevel environment without loading `topfind`. + Since the opam default `.ocamlinit` file loads `topfind`, it is expected + that only scripts run with `ocaml -noinit` are affected. + For those scripts, accessing `Topdirs` now requires the `compiler-libs` + directory to be added to the toplevel search path with + ``` + #directory "+compiler-libs";; + ```` + as was already the case for the other modules in the toplevel interface + library. + (Sébastien Hinderer, review by Florian Angeletti, Nicolás Ojeda Bär and + Gabriel Scherer) + +- #11615: remove global variables form asmcomp/linearize.ml + (Stefan Muenzel, review by Nicolás Ojeda Bär + +- #10856: Add location, attribute(s) visitors to Tast_mapper/Tast_iterator + (Yan Dong, review by Nicolás Ojeda Bär and Gabriel Scherer) + +- #11763, #11759, #11861: Enable stricter C compilation warnings, use + strict prototypes on primitives. + (Antonin Décimo, review by Xavier Leroy, David Allsopp and Sébastien + Hinderer) + +- #11933: Use the correct machtype when reading the code pointer from closures + (Nathanaëlle Courant, review by Gabriel Scherer and Vincent Laviron) + +- #11972: refactor runtime/frame_descriptors.c + in preparation for quadratic-time fix + (Gabriel Scherer, review by Enguerrand Decorne) + +- #11997: translate structured constants into their Obj.t representation + at compile time rather than link time. Changes the way dumpobj prints + these constants because their representation becomes untyped. + (Sébastien Hinderer, review by Xavier Leroy, Nicolás Ojeda Bär and + Hugo Heuzard) + +- #12011: remove Ctype.reified_var_counter + (Takafumi Saikawa and Jacques Garrigue, review by Gabriel Scherer) + +- #12012: move calls to Typetexp.TyVarEnv.reset inside with_local_level etc. + (Jacques Garrigue and Takafumi Saikawa, review by Gabriel Scherer) + +- #12034: a logarithmic algorithm to find the next free variable + (Gabriel Scherer, review by Stefan Muenzel) + +- #12092: remove Lev_module_definition from lambda + (Nick Roberts, review by Gabriel Scherer) + +- #12117: Remove arity-interrupting elaboration of module unpacks + (Nick Roberts, review by Richard Eisenberg and Jacques Garrigue) + +- #12118: stop storing names of predefined exceptions in the + cu_required_globals field of compilation unit descriptors. + (Sébastien Hinderer, review by Vincent Laviron) + +- #12125: Add Misc.print_see_manual and modify [@manual_ref] to accept + lists for simpler printing of manual references + (Stefan Muenzel, review by Florian Angeletti) + +- #12509: Use strict prototypes on primitives when generating a standalone + bytecode executable (`ocamlc -custom`). + (Antonin Décimo, review by Xavier Leroy) + +### Build system: + +- #11844: Reduce verbosity of `make` logs by printing program invocations in + shorthand (eg `OCAMLC foo.cmo`). Setting `V=1` recovers the old style (with + full command-lines). + (Xavier Leroy, Nicolás Ojeda Bär, review by Sébastien Hinderer) + + +- #11590: Allow installing to a destination path containing spaces. + (Élie Brami, review by Sébastien Hinderer and David Allsopp) + +- #11243, #11248, #11268, #11420, #11675: merge the sub-makefiles into + the root Makefile. + (Sébastien Hinderer, review by David Allsopp and Florian Angeletti) + +- #11828: Compile otherlibs/ C stubs in two version for native and bytecode + (Olivier Nicole, review by Sébastien Hinderer and Xavier Leroy) + +- #12265: Stop adding -lexecinfo to cclibs (leftover debugging code from the + multicore project). Harden the feature probe for -lm in configure so -lm is + only added if strictly necessary. configure.ac now correctly propagates + library flags for the Windows ports, allowing Windows OCaml to be configured + with ZSTD support. + (David Allsopp, review by Sébastien Hinderer) + +- #12372: Pass option -no-execute-only to the linker for OpenBSD >= 7.3 + so that code sections remain readable, as needed for closure marshaling. + (Xavier Leroy and Anil Madhavapeddy, review by Anil Madhavapeddy and + Sébastien Hinderer) + +### Bug fixes: + +- #12062: fix runtime events consumer: when events are dropped they shouldn't be + parsed. (Lucas Pluvinage) + +- #12132: Fix overcounting of minor collections in GC stats. + (Damien Doligez, review by Gabriel Scherer) + +- #12017: Re-register finaliser only after calling user alarm in Gc.create_alarm + (Fabrice Buoro, report by Sam Goldman, review by Guillaume Munch-Maccagnoni) + +- #11887, #11893: Code duplication in pattern-matching compilation + (Vincent Laviron, report par Greta Yorsh, review by Luc Maranget and + Gabriel Scherer) + +- #10664, #11600: Unsoundness in the typing of polymorphic methods + involving polymorphic variants + (Jacques Garrigue, report by Mike Shulman, review by Gabriel Scherer) + +- #11302, #11412: `ocamlc` and `ocamlopt` should not remove generated files + when they are not regular files. + (Xavier Leroy, report by Thierry Martinez, review by + Anil Madhavapeddy, Nicolás Ojeda Bär, David Allsopp) + +- #10348, #10560, #11561: Expand GADT equations lazily during unification to + avoid ambiguity + (Jacques Garrigue, review by Leo White) + +- #11436: Fix wrong stack backtrace for out-of-bound exceptions raised + by leaf functions. + (Tom Kelly and Xavier Leroy, review by Mark Shinwell) + +- #11450, #12018: Fix erroneous functor error messages that were too eager to + cast `struct end` functor arguments as unit modules in `F(struct end)`. + (Florian Angetti, review by Gabriel Scherer) + +- #11643: Add missing test declaration to float_compare test, so that it will + run. + (Stefan Muenzel, review by David Allsopp) + +- #11630: Use correct location when reporting record labels with non-existent + paths. + (Nicolás Ojeda Bär, report by Jason Gross, review by Gabriel Scherer) + +- #11727: Ensure push_defaults can push past module patterns, fixing an + currying optimisation accidentally disabled by #10340. + (Stephen Dolan, review by Gabriel Scherer) + +- #11771: Use a more relaxed mode for unification in Ctype.subst + (Leo White, review by Jacques Garrigue and Gabriel Scherer) + +- #11803, #11808: on x86, the destination of an integer comparison must be + a register, it cannot be a stack slot. + (Vincent Laviron, review by Xavier Leroy, report by + Emilio Jesús Gallego Arias) + +- #11809: Protect Parmatch.pats_of_type from missing cmis + (Jacques Garrigue, review by Stephen Dolan and Gabriel Scherer) + +- #11824: Fix a crash when calling `ocamlrun -b` + (Florian Angeletti, review by Sébastien Hinderer) + +- #11815: Marshalling continuations raises invalid argument exception. + (Jérôme Vouillon, review by Nicolás Ojeda Bär, Stephen Dolan and + Hugo Heuzard) + +- #11846: Mark rbx as destroyed at C call for Win64 (mingw-w64 and Cygwin64). + Reserve the shadow store for the ABI in the c_stack_link struct instead of + explictly when calling C functions. This simultaneously reduces the number of + stack pointer manipulations and also fixes a bug when calling noalloc + functions where the shadow store was not being reserved. + (David Allsopp, report by Vesa Karvonen, review by Xavier Leroy and + KC Sivaramakrishnan) + +- #11850: When stopping before the `emit` phase (using `-stop-after`), an empty + temporary assembly file is no longer left in the file system. + (Nicolás Ojeda Bär, review by Gabriel Scherer and Xavier Leroy) + +- #11866: Fix the result of `caml_read_directory()` on non-existent paths. + (Andrei Paskevich and Charlène Gros, review by David Allsopp and + Nicolás Ojeda Bär) + +- #11879: Bugfix for Ctype.nondep_type + (Stephen Dolan, review by Gabriel Scherer) + +- #12004: Don't ignore function attributes on lambdas with locally abstract + types. + (Chris Casinghino, review by Gabriel Scherer) + +- #12037: Fix some data races by using volatile when necessary + (Fabrice Buoro and Olivier Nicole, review by Guillaume Munch-Maccagnoni, + Gabriel Scherer and Luc Maranget) + +- #12046: Flush stderr when tracing the parser + (Hugo Heuzard, review by David Allsopp and Nicolás Ojeda Bär) + +- #12061, #12063: don't add inconsistent equalities when computing + high-level error messages for functor applications and inclusions. + (Florian Angeletti, review by Gabriel Scherer) + +- #12075: auto-detect whether `ar` support @FILE arguments at + configure-time to avoid using this feature with toolchains + that do not support it (eg FreeBSD/Darwin). + (Nicolás Ojeda Bär, review by Xavier Leroy, David Allsop, Javier + Chávarri, Anil Madhavapeddy) + +- #12103, 12104: fix a concurrency memory-safety bug in Buffer + (Gabriel Scherer, review by Florian Angeletti, report by Samuel Hym) + +- #12112: Fix caml_callback{2,3}_exn when used with effect handlers. + (Lucas Pluvinage, review by Gabriel Scherer, David Allsopp and Xavier Leroy) + +- #12134: Use ghost location for nodes created when handling defaults in + optional arguments. + (Paul-Elliot Anglès d'Auriac, review by Gabriel Scherer) + +- #12153: Fix segfault in bytecode programs involving recursive value + definitions of values of size 0 + (Vincent Laviron, Xavier Leroy, Gabriel Scherer, + review by Xavier Leroy, report by Nick Roberts) + +- #12162: Fix miscompilation on amd64 backends involving integer overflows + (Vincent Laviron and Greta Yorsh, review by Stefan Muenzel) + +- #12170: fix pthread_geaffinity_np configure check for android + (David Allsopp, review by Sébastien Hinderer) + +- #12178: Fix runtime events consumer poll function returning an invalid value + instead of an OCaml integer value. (Lucas Pluvinage) + +- #12252: Fix shared library build error on RISC-V. + (Edwin Török, review by Nicolás Ojeda Bär and Xavier Leroy) + +- #12255, #12256: Handle large signal numbers correctly (Nick Barnes, + review by David Allsopp). + +- #12277: ARM64, fix a potential assembler error for very large functions by + emitting stack reallocation code before the body of the function. + (Xavier Leroy, review by KC Sivaramakrishnan) + +- #12253, #12342: Fix infinite loop in signal handling. + (Guillaume Munch-Maccagnoni, report by Thomas Leonard, review by + KC Sivaramakrishnan and Sadiq Jaffer) + +- #12445: missing GC root registrations in runtime/io.c + (Gabriel Scherer, review by Xavier Leroy and Jeremy Yallop) + +- #12481, #12505: Fix incorrect initialization of array expressions + `[|e1;...;eN|]` when `N` is large enough to require major heap allocation. + (Xavier Leroy, report by Andrey Popp, analysis by KC Sivaramakrishnan + and Vincent Laviron, review by Gabriel Scherer) + +- #11150, #11207, #11936: Avoid recomputation in Typedecl.check_wellfounded + (Jacques Garrigue, report by Boris Yakobowski, review by Gabriel Scherer) + +- #11186, #11188: Fix composition of coercions with aliases + (Vincent Laviron, report and review by Leo White) + +- #12486: Fix delivery of unhandled effect exceptions on s390x + (Miod Vallat, report by Jan Midtgaard, review by Vincent Laviron and Xavier + Leroy) + +OCaml 5.0.0 (15 December 2022) +------------------------------ + +- #10831: Multicore OCaml + (Enguerrand Decorne, Stephen Dolan, Tom Kelly, Sadiq Jaffer, + Anil Madhavapeddy, Sudha Parimala, KC Sivaramakrishnan, + Leo White, the Tarides multicore team, + review by Florian Angeletti, Damien Doligez, Xavier Leroy, + Guillaume Munch-Maccagnoni, Olivier Nicole, Nicolás Ojeda Bär, + Gabriel Scherer, the OCaml core development team, and many + other valued reviewers.) + +### Language features: + +### Runtime system: + +- #11400: Runtime events counters fixes + Fixes mismatch between OCaml and C APIs, removes events from 4.x that + are not present in the 5.0 GC and adds some missing probes. + (Sadiq Jaffer, review by Gabriel Scherer, Florian Angeletti) + +- #11368: Runtime events buffer size OCAMLRUNPARAMS fix + The runtime events buffer size can now be set via the 'e' OCAMLRUNPARAM. + This is previously mistakenly enabled/disabled tracing instead. + (Sadiq Jaffer, review by KC Sivaramakrishnan, David Allsopp, Damien Doligez) + +- #11308: Add environment variable to preserve runtime_events after exit + If the environment variable OCAML_RUNTIME_EVENTS_PRESERVE exists then the + runtime will not remove the runtime events ring buffers at exit. This + makes tracing very short running programs more reliable. + (Sadiq Jaffer, review by KC Sivaramakrishnan) + +- #10964: Ring-buffer based runtime tracing (runtime_events) + Runtime_events is a very low overhead runtime tracing system designed for + continuous monitoring of OCaml applications. + (Sadiq Jaffer, review by Anil Madhavapeddy, Enguerrand Decorne, + Richard Warburton, Gabriel Scherer, Sabine Schmaltz, Florian Angeletti, + Patrick Ferris, Tom Kelly) + +* #10723: do not use `-flat-namespace` linking for macOS. + (Carlo Cabrera, review by Damien Doligez) + +* #10863, #10933: Remove support for old, unprefixed C runtime function names + such as `alloc`. The new names prefixed with `caml_` must be used instead, + such as `caml_alloc`. Consequently, it is no longer needed to define + `CAML_NAME_SPACE` to avoid bringing unprefixed names into scope: this is now + the default behavior. + (Nicolás Ojeda Bär, review by Xavier Leroy) + +- #10902: Do not register empty code fragments in natdynlink. + (David Allsopp, review by Xavier Leroy and Damien Doligez) + +- #10965: `caml_fatal_error_hook`, GC timing hooks, and + `caml_scan_roots_hook` are now atomic variables. Restore GC timing + hooks in multicore. + (Guillaume Munch-Maccagnoni, review by Enguerrand Decorne, Xavier + Leroy, Gabriel Scherer, and KC Sivaramakrishnan) + +- #11209: Add a public and thread-safe timing hook running at domain + termination, after this domain has stopped running any OCaml code: + `caml_domain_terminated_hook`. This can be useful for implementing + domain-local state in C. + (Guillaume Munch-Maccagnoni, review by Xavier Leroy and Gabriel + Scherer) + +- #10875, #11731: Add option to allocate fiber stacks and sigaltstacks with + mmap(MAP_STACK) instead of malloc. This is exposed via a configure + --enable-mmap-map-stack option, and is enabled by default on OpenBSD where + it is mandatory. + (Anil Madhavapeddy, review by Gabriel Scherer, Tom Kelly, + Michael Hendricks and KC Sivaramakrishnan). + +- #10950: Do not use mmap to allocate Caml_state. + In order to reduce virtual memory usage, we dynamically allocate + the domain_state structure. + (Enguerrand Decorne, KC Sivaramakrishnan and Tom Kelly, + review by Anil Madhavapeddy and Gabriel Scherer) + +- #11010: Use strerror_r for reentrant error string conversion. + (Anil Madhavapeddy and Xavier Leroy, review by same and Edwin Török) + +- #11002, #11066, #11086: Do not use Begin_roots/End_roots macros in + the runtime system. Also fix a missing root registration in the + implementation of Unix.write on Windows. + (Nicolás Ojeda Bär, Daniel Bünzli and Antonin Décimo, + review by Xavier Leroy and David Allsopp) + +- #11022: Track GC work for all managed bigarray allocations + (Stephen Dolan, report by Andrew Hunter, review by Damien Doligez) + +- #10802: Use 4.12 value macros and helpers in C code + (Antonin Décimo, review by Gabriel Scherer) + +- #11105: Fix handling of fiber stack cache with multiple domains + (Jon Ludlam, KC Sivaramakrishnan and Tom Kelly) + +- #11054: Respect user provided maximum stack space + Make sure the stack we initially request is sized accordingly to + the user provided settings. tmc/stack_space is also updated by + this PR in order to account for this change. + (Enguerrand Decorne, report by Jon Ludlam, + review by Tom Kelly, KC Sivaramakrishnan and Gabriel Scherer) + +- #11238: Increase the default limit for the stack size to 128 Mi words, + i.e. 1 Gib for 64-bit platforms and 512 Mib for 32-bit platforms. + (Xavier Leroy, review by Sébastien Hinderer) + +* #11295: An ISO C 2011 compliant compiler, including full support for atomic + types, is now required to build the OCaml runtime system. + (Xavier Leroy, review by David Allsopp and Sébastien Hinderer) + +- #10915, #11039, #11057, #11095, #11190: Implement quality treatment for + asynchronous actions in multicore. Reimplement the old behaviour of + `caml_process_pending*` for multicore. + (Guillaume Munch-Maccagnoni, review by Sadiq Jaffer and Gabriel Scherer) + +- #11303: Ensure that GC is not invoked from bounds check failures + (Stephen Dolan, review by Sadiq Jaffer and Xavier Leroy) + +- #11304: Fix data race on Windows file descriptors + (Olivier Nicole and Xavier Leroy, review by Xavier Leroy, David Allsopp, + and Sadiq Jaffer) + +* #11337: pass 'flags' metadata to root scanners, to optimize stack + scanning in the bytecode interpreter. + Changes the interface of user-provided root-scanning hooks. + (Gabriel Scherer, review by Xavier Leroy, + Guillaume Munch-Maccagnoni, Sadiq Jaffer and Tom Kelly) + +* #11255: in the C interface, `&Field(v, i)` now has type `volatile value *` + instead of `value *` in OCaml 4. This makes the memory model + for mixed OCaml/C code better defined, but can cause warnings or type + errors in user C code. + (KC Sivaramakrishnan, review by Xavier Leroy, Gabriel Scherer and + Guillaume Munch-Maccagnoni, additional discussions with Stephen + Dolan and Luc Maranget) + +- #5299, #4787, #11138, #11272, #11506: To help debugging, `Caml_state` + now dynamically checks that the domain lock is held, and fails + otherwise (with a fatal error at most entry points of the C API, or + systematically in debug mode). A new variable `Caml_state_opt` is + introduced, and is `NULL` when the domain lock is not held. This + allows to test from C code if the current thread holds the lock of + its domain. + (Guillaume Munch-Maccagnoni, review by Florian Angeletti, Damien + Doligez, Sadiq Jaffer, Xavier Leroy, and Gabriel Scherer) + +- #11223: The serialization format of custom blocks changed in 4.08, + but the deserializer would still support the pre-4.08 format. OCaml + 5.x removed support for this old format; provide a clear error message + in this case. + (Hugo Heuzard, review by Gabriel Scherer) + +- #11504, #11522: Use static allocation in `caml_make_float_vect` in + no-flat-float-array mode, it's more efficient and avoids a a race condition + (Xavier Leroy, report by Guillaume Munch-Maccagnoni, review by David Allsopp) + +- #11652: Fix benign off-by-one error in Windows implementation of caml_mem_map. + (David Allsopp, review by Gabriel Scherer) + +- #11669, #11704: Fix construction of Effect.Unhandled exceptions in the + bytecode interpreter. + (David Allsopp and Xavier Leroy, report by Samuel Hym, review by Xavier Leroy + and Gabriel Scherer) + +### Code generation and optimizations: + +- #10972: ARM64 multicore support: OCaml & C stack separation; + dynamic stack size checks; fiber and effects support. + (Tom Kelly and Xavier Leroy, review by KC Sivaramakrishnan, Xavier Leroy + Guillaume Munch-Maccagnoni, Eduardo Rafael, Stephen Dolan and + Gabriel Scherer) + +* #10845 Emit frametable size on amd64 BSD (OpenBSD, FreeBSD, NetBSD) systems + (emitted for Linux in #8805) + (Hannes Mehnert, review by Nicolás Ojeda Bär) + +### Standard library: + +- #10742: Use LXM as the pseudo-random number generator for module Random. + Add `Random.State.split` and `Random.split` to "split" a PRNG off + another PRNG. + (Xavier Leroy, review by Gabriel Scherer and Hugo Heuzard) + +* #10867, #11345: Remove deprecated values: Array.create, Array.make_float, + Array.create_matrix, Bytes.uppercase, Bytes.lowercase, Bytes.capitalize, + Bytes.uncapitalize, Char.lowercase, Char.uppercase, Filename.temp_dir_name, + Int32.format, Int64.format, Nativeint.format, Format.bprintf, Format.kprintf, + Format.set_all_formatter_output_functions, + Format.get_all_formatter_output_functions, + Format.pp_set_all_formatter_output_functions, + Format.pp_get_all_formatter_output_functions, Format.pp_open_tag, + Format.pp_close_tag, Format.open_tag, Format.close_tag, + Format.formatter_tag_functions, Format.pp_set_formatter_tag_functions, + Format.pp_get_formatter_tag_functions, Format.set_formatter_tag_functions, + Format.get_formatter_tag_functions, Gc (mutability of the fields of type + Gc.control), Lazy.lazy_from_fun, Lazy.lazy_from_val, Lazy.lazy_is_val, + Obj.set_tag, Obj.truncate, Obj.final_tag, Obj.extension_constructor, + Obj.extension_name, Obj.extension_id, Scanf.stdib, Scanf.fscanf, + Scanf.kfscanf, Stdlib.( & ), Stdlib.( or ), String.set, String.copy, + String.fill, String.unsafe_set, String.unsafe_fill, String.uppercase, + String.lowercase, String.capitalize, String.uncapitalize, Thread.kill, + Thread.wait_write, Thread.wait_read, the whole ThreadUnix module, the + infix operator (.[]<-). + (Nicolás Ojeda Bär, review by Damien Doligez) + +* #10896: Remove Stream, Genlex and Pervasives. Also remove legacy standalone + bigarray library (the Bigarray module is now part of the standard library). + (Nicolás Ojeda Bär, review by Kate Deplaix and Anil Madhavapeddy) + +- #10921: Use getentropy, when available, to seed the generator during + `Random.self_init` + (Michael Hendricks, review by Gabriel Scherer, Xavier Leroy, and + Anil Madhavapeddy) + +* #10924: Add deprecated attribute to Printexc.catch, Printf.kprintf and + Unix.SO_ERROR. + (Nicolás Ojeda Bär, review by Damien Doligez) + +- #10986: Add Scanf.sscanf_opt, Scanf.bscanf_opt and Scanf.scanf_opt. + (Nicolás Ojeda Bär, review by Florian Angeletti and Gabriel Scherer) + +* #11157: Rename "hash" in the "Hashtbl.SeededHashedType" signature to + "seeded_hash". This allows defining both seeded and unseeded hash functions in + the same module. + (Nicolás Ojeda Bär, review by Gabriel Scherer and Xavier Leroy) + +- #8878: Add String.hash and String.seeded_hash. + (Tom Kelly, review by Alain Frisch and Nicolás Ojeda Bär) + +- #11279, #11585, #11742: ensure that the unsafe Buffer code + remains memory-safe in concurrent settings. + Unsynchronized access to Buffer is a programming error and may + result in wrong behavior, but it should preserve memory-safety. + (Florian Angeletti and Gabriel Scherer, review by Gabriel Scherer + and Vincent Laviron, report by David Allsopp) + + +### Other libraries: + +* #9071, #9100, #10935: Reimplement `Thread.exit()` as raising the + exception `Thread.Exit`, and mark `Thread.exit` as deprecated. + The new implementation changes the behavior compared with + the OCaml 4 implementation. For example, the new implementation + causes `Fun.finally` finalizers to be run and catch-all exception + handlers to prevent termination. + (Jacques-Henri Jourdan and Xavier Leroy, review by Damien Doligez, + Guillaume Munch-Maccagnoni, Gabriel Scherer, and Enguerrand Decorne) + +- #11034: Dynlink library, add a global lock to make dynlinking + thread-safe. + (Florian Angeletti, review by Gabriel Scherer) + +- #11087: deprecate Thread.wait_timed_read, Thread.wait_timed_write, + Thread.select, Thread.wait_pid. The same functionality is available in the + Unix module. + (Nicolás Ojeda Bär, review by Anil Madhavapeddy) + +- #11309, #11424, #11427, #11545: Add Domain.recommended_domain_count. + (Christiano Haesbaert, Konstantin Belousov, review by David Allsopp, + KC Sivaramakrishnan, Gabriel Scherer, Nicolas Ojeda Bar) + +- #11461, #11466: Fix gethostbyaddr for IPv6 arguments and make it domain-safe + (Olivier Nicole, Nicolás Ojeda Bär, David Allsopp and Xavier Leroy, + review by the same) + +- #11479: Make Unix.symlink domain-safe on Windows + (Olivier Nicole, review by Xavier Leroy and David Allsopp) + +### Tools: + +* #11004: Litmus tests for checking the implementation of the + memory model. + (Luc Maranget, review by Gabriel Scherer and Xavier Leroy) + +- #11024: Handle alerts in ocamldoc. + The alert `[@@alert deprecated]` is handled specifically and it's no longer + needed to duplicate the deprecated annotation (the alert for the compiler and + the tag for the documentation). Every other alerts also appear in the + documentation. + (Jules Aguillon, review by Florian Angeletti) + +- #11065: Port the bytecode debugger to 5.0, adding support for effect handlers. + (Damien Doligez and @fabbing, review by @fabbing and Xavier Leroy) + +- #11079: Add the -nobanners option to dumpobj. + (Sébastien Hinderer, review by Gabriel Scherer and Vincent Laviron) + +- #11100: Fix ocamltest to make sure failed tests are not counted as + "unexpected error". + (Damien Doligez, review by Sébastien Hinderer) + +- #11245: Merge the common code of ocamlcp and ocamloptp into a single module. + (David Allsopp, review by Sébastien Hinderer) + +- #11382: OCamlmktop use a new initialization module "OCamlmktop_init" to + preserve backward-compatibility with user-module provided modules that install + toplevel printers. + (Florian Angeletti, review by Gabriel Scherer and David Allsopp) + +### Manual and documentation: + +- #11058: runtime/HACKING.adoc tips on debugging the runtime + (Gabriel Scherer, review by Enguerrand Decorne and Nicolás Ojeda Bär) + +- #11093: Add an effect handlers tutorial + (KC Sivaramakrishnan, review by François Pottier, Gabriel Scherer, François + Bobot and Wiktor Kuchta) + +- #11192: Better documentation for condition variables. + (François Pottier, review by Luc Maranget, Xavier Leroy, and Wiktor Kuchta) + +- #11093: Add tutorials on parallelism features and the relaxed memory model + (KC Sivaramakrishnan, review by Damien Doligez, Anil Madhavapeddy, Gabriel + Scherer, Thomas Leonard, Tom Ridge, Xavier Leroy, Luc Maranget, Fabrice + Buoro, Olivier Nicole, Guillaume Munch-Maccagnoni, Jacques-Henri Jourdan) + +- #11640, #11647: Add missing options to the man pages: + flambda commonly-used options, and negative options (`-no-rectypes`, ... ). + (Amandine Nangah, review by David Allsopp, Florian Angeletti, + Sébastien Hinderer, and Vincent Laviron) + +- #11676: Fix missing since annotation in the `Sys` and `Format` modules + (Github user Bukolab99, review by Florian Angeletti) + +- #11813: Make new multicore chapters easier to discover, and emphasize impact + on C bindings. + (Edwin Török, review by KC Sivaramakrishnan, and Florian Angeletti) + +### Compiler user-interface and warnings: + +- #9140, #11131: New command-line flag -nocwd to not include implicit + the current directory to the load path. + (Thomas Roglin, review by Gabriel Scherer and Nicolás Ojeda Bär) + +- #11089: Add 'since ' information to compiler warnings. + (André Maroneze, review by Florian Angeletti and Gabriel Scherer) + +- #10909: Disable warning 59 (assignment to immutable blocks) unless flambda + invariant checks are enabled. + (Vincent Laviron, review by Gabriel Scherer) + +- #10981, #11276: Implement a -cmi-file option for ocamlc and ocamlopt. + (Sébastien Hinderer, review by Damien Doligez, Daniel Bünzli and + Florian Angeletti) + +* #11049: Stop padding 1-digit compiler minor version numbers. + (So for instance OCaml 5.0 rather than 5.00) + (Sébastien Hinderer, review by David Allsopp, Florian Angeletti and + Xavier Leroy) + +- #11184, #11670: Stop calling ranlib on created / installed libraries + (Sébastien Hinderer and Xavier Leroy, review by the same) + +- #11253: Deprecate `ocaml script` and `ocamlnat` script where `script` has no + extension and is an implicit basename. + (David Allsopp, review by Florian Angeletti and Sébastien Hinderer) + +### Internal/compiler-libs changes: + +- #10878, #10909: restore flambda after the Multicore merge. + (Vincent Laviron, review by Gabriel Scherer and Xavier Leroy) + +- #10864, #10888: restore afl-fuzz mode for sequential programs. + (Jan Midtgaard, review by Xavier Leroy and Gabriel Scherer) + +- #11008, #11047: rework GC statistics in the Multicore runtime + (Gabriel Scherer, review by Enguerrand Decorne) + +- #11058: basic debugging documentation in runtime/HACKING.adoc + (Gabriel Scherer, review by Enguerrand Decorne and Nicolás Ojeda Bär) + +- #11199: Stop installing topdirs.cmi twice. The toplevel now reads topdirs.cmi + from +compiler-libs, as the debugger does. + (David Allsopp, review by Sébastien Hinderer) + +- #11007, #11399: META files for the stdlib, compiler-libs and other libraries + (unix, dynlink, str, runtime_events, threads, ocamldoc) are now installed + along with the compiler. + (David Allsopp, Florian Angeletti, Nicolás Ojeda Bär and Sébastien Hinderer, + review by Daniel Bünzli, Kate Deplaix, Anil Madhavapeddy and Gabriel Scherer) + +### Build system: + +* #10893: Remove configuration options --disable-force-safe-string and + DEFAULT_STRING=unsafe as well as --enable-force-safe-string and + DEFAULT_STRING=safe which are now the default unconditionally. + (Kate Deplaix, review by Gabriel Scherer and David Allsopp) + +- #11092: Build native-code compilers on OpenBSD/aarch64. + (Christopher Zimmermann, review by Anil Madhavapeddy) + +- #11126: Build system: make it possible to choose which ocamldep + (and flags) to use when computing dependencies for the compiler. + Add a -no-slash option to ocamldep to let users override -slash. + (Sébastien Hinderer, review by David Allsopp) + +- #11147: Factorize the stdlib-related compilation flags. Make it + possible to control them consistently through the STDLIBFLAGS + build variable. Make sure ocamldoc and ocamllex get compiled and + linked with debugging information (-g). + (Sébastien Hinderer, review by Gabriel Scherer) + +- #11149: Make the bootstrap process reproducible on systems with non-big-endian + floating point. If the boot/ artefacts are up-to-date, this means that running + make bootstrap on any platform should not change the images in boot/ and paves + the way for automated testing that the bootstrap is repeatable. + (David Allsopp, review by Damien Doligez and Sébastien Hinderer) + +- #11160: otherlibs: merge win32unix into unix. + (Sébastien Hinderer, review by David Allsopp, Nicolás Ojeda Bär, + Xavier Leroy, Vincent Laviron and Antonin Décimo) + +* #11198, #11298: Install the Dynlink, Str and Unix libraries to individual + subdirectories of LIBDIR. The compiler, debugger and toplevel automatically + add `-I +lib` if required, but display an alert. + (David Allsopp, review by Florian Angeletti, Nicolás Ojeda Bär, + Valentin Gatien-Baron and Sébastien Hinderer) + +- #11200: Install ocamlprof's Profiling runtime module to a +profiling, + removing it from the default namespace. + (David Allsopp, review by Sébastien Hinderer) + +- #11294: Switch minimum required autoconf to 2.71. + (David Allsopp, review by Xavier Leroy) + +- #11370, #11373: Don't pass CFLAGS to flexlink during configure. + (David Allsopp, report by William Hu, review by Xavier Leroy and + Sébastien Hinderer) + +- #11487: Thwart FMA test optimization during configure + (William Hu, review by David Allsopp and Sébastien Hinderer) + +- #11097: Build native-code compilers on NetBSD/aarch64 + (Kate Deplaix, review by Anil Madhavapeddy) + +### Bug fixes: + +- #10768, #11340: Fix typechecking regression when combining first class + modules and GADTs. + (Jacques Garrigue, report by François Thiré, review by Matthew Ryan) + +- #10790: don't drop variance and injectivity annotations when pretty printing + `with` constraints (for example, `with type +!'a t = ...`). + (Florian Angeletti, report by Luke Maurer, review by Matthew Ryan and + Gabriel Scherer) + +- #11167: Fix memory leak from signal stack. + (Antoni Żewierżejew, review by Gabriel Scherer and Enguerrand Decorne) + +- #11112: harden -use-runtime against spaces or quotes in the provided path + (Gabriel Scherer, report by Brahima Dibassi, review by David Allsopp) + +- #11068, #11070: Fix typo in function name given in Unix_error exception for + Unix.readlink on Windows. + (David Allsopp, report by Xia Li-yao) + +- #10807: Don't duplicate standard handles in the child process + spawned by win32unix Unix.create_process if the handles were already + inheritable. Fix broken signalling of EOF on standard handles if + they were already inheritable. + (Antonin Décimo, review by Xavier Leroy and Nicolás Ojeda Bär) + +- #10868: Fix off-by-1 bug when initializing frame hashtables + (Jonah Beckford, review by Tom Kelly, Nicolás Ojeda Bär and + KC Sivaramakrishnan) + +- #11077: Make dumpobj compatible with absence of naked pointer support + (Olivier Nicole and Jan Midtgaard, review by Gabriel Scherer) + +- #11111: fix fork() usage in ocamltest C code. + When calling fork() from C code with the Multicore runtime active, + one needs to call caml_atfork_hook() on the forked child before it + can use the OCaml runtime. + (Gabriel Scherer, review by Xavier Leroy, report by Brahima Dibassi) + +- #10809: Use the WSA_FLAG_NO_HANDLE_INHERIT on Windows when creating + sockets with WSASocket if the cloexec (non-inheritable) parameter is + true. Fixes a race condition where a child process could inherit the + socket and deadlock the parent. + (Antonin Décimo, review by Xavier Leroy) + +- #11194, #11609: Fix inconsistent type variable names in "unbound type var" + messages + (Ulysse Gérard and Florian Angeletti, review Florian Angeletti and + Gabriel Scherer) + +- #11204: Fix regression introduced in 4.14.0 that would trigger Warning 17 when + calling virtual methods introduced by constraining the self type from within + the class definition. + (Nicolás Ojeda Bär, review by Leo White) + +- #11263, #11267: caml/misc.h: check whether `_MSC_VER` is defined before using + it to ensure that the headers can always be used in code which turns on + -Wundef (or equivalent). + (David Allsopp and Nicolás Ojeda Bär, review by Nicolás Ojeda Bär and + Sébastien Hinderer) + +- #11289, #11405: fix some leaks on systhread termination + (Fabrice Buoro, Enguerrand Decorne, Gabriel Scherer, + review by Xavier Leroy and Florian Angeletti, report by Romain Beauxis) + +- #11314, #11416: fix non-informative error message for module inclusion + (Florian Angeletti, report by Thierry Martinez, review by Gabriel Scherer) + +- #11358, #11379: Refactor the initialization of bytecode threading, + This avoids a "dangling pointer" warning of GCC 12.1. + (Xavier Leroy, report by Armaël Guéneau, review by Gabriel Scherer) + +- #11387, module type with constraints no longer crash the compiler in presence + of both shadowing warnings and the `-bin-annot` compiler flag. + (Florian Angeletti, report by Christophe Raffalli, review by Gabriel Scherer) + +- #11392, #11392: assertion failure with -rectypes and external definitions + (Gabriel Scherer, review by Florian Angeletti, report by Dmitrii Kosarev) + +- #11417: Fix regression allowing virtual methods in non-virtual classes. + (Leo White, review by Florian Angeletti) + +- #11468: Fix regression from #10186 (OCaml 4.13) detecting IPv6 on Windows for + mingw-w64 i686 port. + (David Allsopp, review by Xavier Leroy and Sébastien Hinderer) + +- #11482, #11542: Fix random crash in large closure allocation + (Damien Doligez, report by Thierry Martinez and Vincent Laviron, review by + Xavier Leroy) + +- #11508, #11509: make Bytes.escaped domain-safe + (Christiano Haesbaert and Gabriel Scherer, + review by Xavier Leroy, + report by Jan Midtgaard and Tom Kelly) + +- #11516, #11524: Fix the `deprecated_mutable` attribute. + (Chris Casinghino, review by Nicolás Ojeda Bär and Florian Angeletti) + +- #11576: Fix bug in Bigarray.Genarray.init in the the case of zero-dimensional + arrays. + (Nicolás Ojeda Bär, Jeremy Yallop, report by Masayuki Takeda, review by Jeremy + Yallop and Florian Angeletti) + +- #11587: Prevent integer comparison from being used on pointers + (Vincent Laviron, review by Gabriel Scherer) + +- #11622: Prevent stack overflow when printing a constructor or record + mismatch error involving recursive types. + (Florian Angeletti, review by Gabriel Scherer) + +- #11662, #11673: fix a memory leak when using Dynlink, + the bug was only present in development version of OCaml 5. + (Stephen Dolan, report by Andre Maroneze, review by Gabriel Scherer) + +- #11732: Ensure that types from packed modules are always generalised + (Stephen Dolan and Leo White, review by Jacques Garrigue) + +- #11737: Fix segfault condition in Unix.stat under Windows in the presence of + multiple threads. + (Marc Lasson, Nicolás Ojeda Bär, review by Gabriel Scherer and David Allsopp) + +- #11776: Extend environment with functor parameters in `strengthen_lazy`. + (Chris Casinghino and Luke Maurer, review by Gabriel Scherer) + +- #11533, #11534: follow synonyms again in #show_module_type + (this had stopped working in 4.14.0) + (Gabriel Scherer, review by Jacques Garrigue and Florian Angeletti, + report by Yaron Minsky) + +OCaml 4.14.0 (28 March 2022) +---------------------------- + +### Language features: + +- #10462: Add attribute to produce a compiler error for polls. + (Sadiq Jaffer, review by Mark Shinwell, Stephen Dolan + and Guillaume Munch-Maccagnoni) + +- #10437: Allow explicit binders for type variables. + (Stephen Dolan, review by Leo White) + +- #10441: Remove unnecessary parentheses surrounding immediate objects. + Allow 'object ... end # f', 'f object ... end', etc. + (Yan Dong, review by Nicolás Ojeda Bär, Florian Angeletti and Gabriel Scherer) + +- #181, #9760, #10740: opt-in tail-modulo-cons (TMC) transformation + let[@tail_mod_cons] rec map f li = ... + (Frédéric Bour, Gabriel Scherer, Basile Clément, + review by Basile Clément and Pierre Chambart, + tested by Konstantin Romanov) + +### Runtime system: + +* #9391, #9424: Fix failed assertion in runtime due to ephemerons *set_* and + *blit_* function during Mark phase + (François Bobot, reported by Stephen Dolan, reviewed by Damien Doligez) + +- #10195, #10680: Speed up GC by prefetching during marking + (Stephen Dolan, review by Xavier Leroy, Guillaume Munch-Maccagnoni, + Jacques-Henri Jourdan, Damien Doligez and Leo White) + +- #10549: Stack overflow detection and naked pointers checking for ARM64 + (Xavier Leroy, review by Stephen Dolan) + +* #10675: Emit deprecation warnings when old C runtime function names + are used. This will break C stub code that uses these old names and + treats warnings as errors. The workaround is to use the new names. + (Xavier Leroy and David Allsopp, review by Sébastien Hinderer and + Damien Doligez) + +- #10698, #10726: Free the alternate signal stack when the main OCaml + code or an OCaml thread stops + (Xavier Leroy, review by David Allsopp and Damien Doligez) + +- #10730, 10731: Fix bug in `Obj.reachable_words` causing a slowdown when called + multiple time (Alain Frisch, report by ygrek, review by Xavier Leroy) + +- #10926: Rename the two internal Windows Unicode functions with `caml_` prefix + instead of `win_`. + (David Allsopp, review by Kate Deplaix, Damien Doligez and Xavier Leroy) + +### Code generation and optimizations: + +- #10578: Increase the number of integer registers used for + parameter passing on PowerPC (16 registers) and on s390x (8 registers). + (Xavier Leroy, review by Mark Shinwell) + +- #10591, #10615: Tune the heuristic for CSE of integer constants + so as to avoid excessive CSE on compiler-generated constants + and long register allocation times. + (Xavier Leroy, report by Edwin Török, review by Nicolás Ojeda Bär) + +- #10595: Tail calls with up to 64 arguments are guaranteed to be compiled + as tail calls. To this end, memory locations in the domain state + are used for passing arguments that do not fit in registers. + (Xavier Leroy, review by Vincent Laviron) + +- #10681: Enforce boolean conditions for the native backend + (Vincent Laviron, review by Gabriel Scherer) + +- #10719: Ensure that build_apply respects Lambda.max_arity + (Stephen Dolan, review by Xavier Leroy) + +- #10728: Ensure that functions are evaluated after their arguments + (Stephen Dolan, review by Mark Shinwell) + +- #10732: Ensure right-to-left evaluation of arguments in cmm_helpers + (Greta Yorsh, review by Xavier Leroy) + +### Standard library: + +* #10710: Add UTF tools, codecs and validations to the Uchar, Bytes and + String modules. + (Daniel Bünzli, review by Florian Angeletti, Nicolás Ojeda Bär, Alain + Frisch and Gabriel Scherer) + +* #10622: Annotate `Uchar.t` with immediate attribute + (Hongbo Zhang, reivew by Gabriel Scherer and Nicolás Ojeda Bär) + +* #7812, #10475: `Filename.chop_suffix name suff` now checks that `suff` + is actually a suffix of `name` and raises Invalid_argument otherwise. + (Xavier Leroy, report by whitequark, review by David Allsopp) + +* #10482: mark the Stream and Genlex modules as deprecated, in preparation + for a future removal. These modules (without deprecation alert) + are now provided by the camlp-streams library. + (Xavier Leroy, review by Nicolás Ojeda Bär) + +- #10526: add Random.bits32, Random.bits64, Random.nativebits + (Xavier Leroy, review by Gabriel Scherer and François Bobot) + +* #10568: remove Obj.marshal and Obj.unmarshal + (these functions have been deprecated for a while and are superseded + by the functions from module Marshal) + (François Pottier, review by Gabriel Scherer and Kate Deplaix) + +- #10545: Add In_channel and Out_channel modules. + (Nicolás Ojeda Bär, review by Daniel Bünzli, Simon Cruanes, Gabriel Scherer, + Guillaume Munch-Maccagnoni, Alain Frisch and Xavier Leroy) + +- #10538: add Out_channel.set_buffered and Out_channel.is_buffered to control + the buffering mode of output channels. + (Nicolás Ojeda Bär, review by John Whitington, Daniel Bünzli, David Allsopp + and Xavier Leroy) + +* #10583, #10998: Add over 40 new functions in Seq. + (François Pottier and Simon Cruanes, review by Nicolás Ojeda Bär, + Daniel Bünzli, Naëla Courant, Craig Ferguson, Wiktor Kuchta, + Xavier Leroy, Guillaume Munch-Maccagnoni, Raphaël Proust, Gabriel Scherer + and Thierry Martinez) + +- #10596, #10978: Add with_open_bin, with_open_text and with_open_gen to + In_channel and Out_channel. Also, add In_channel.input_all. + (Nicolás Ojeda Bär, review by Daniel Bünzli, Jérémie Dimino, Damien Doligez + and Xavier Leroy) + +- #10658: add detailed information about the current version of OCaml + to the Sys module of the standard library. + (Sébastien Hinderer, review by Damien Doligez, Gabriel Scherer, David + Allsopp, Nicolás Ojeda Bär, Vincent Laviron) + +- #10642: On Windows, Sys.remove and Unix.unlink now remove symlinks + to directories instead of raising EACCES. Introduce + caml/winsupport.h to hold more common code between the runtime, + lib-sys, and win32unix. + (Antonin Décimo, review by David Allsopp and Xavier Leroy) + +- #10737: add new ephemeron API for forward compatibility with Multicore + OCaml. + (Damien Doligez, review by Stephen Dolan) + +- #10786: The implementation of Complex.norm now uses Float.hypot. + (Christophe Troestler, review by David Allsopp and Xavier Leroy) + +### Other libraries: + +- #10192: Add support for Unix domain sockets on Windows and use them + to emulate Unix.socketpair (only available on Windows 1803+) + (Antonin Décimo, review by David Allsopp) + +- #10469: Add Thread.set_uncaught_exception_handler and + Thread.default_uncaught_exception_handler. + (Enguerrand Decorne, review by David Allsopp) + +- #10697: Bindings of dup and dup2 in win32unix now correctly call + WSADuplicateSocket on sockets instead of DuplicateHandle. + (Antonin Décimo, review by Xavier Leroy and Nicolás Ojeda Bär) + +* #10926, #11336: Ensure all C functions in the Unix library are prefixed with + `caml_`. + (David Allsopp, review by Kate Deplaix, Damien Doligez and Xavier Leroy) + +- #10951: Introduce the Thread.Exit exception as an alternative way to + terminate threads prematurely. This alternative way will become + the standard way in 5.0. + (Xavier Leroy, review by Florian Angeletti) + +### Tools: + +- #9701: Release bytecode only after collecting backtrace information + for exceptions, same for dynamic loaded code compiled from toplevel on + ocamlnat. + (Renato Alencar, reported by Krzysztof Leśniak, reviewed by Gabriel Scherer) + +- #10839: Fix regression of #show when printing class type + (Élie Brami, review by Florian Angeletti) + +- #3959, #7202, #10476: ocaml, in script mode, directive errors + (`#use "missing_file";;`) use stderr and exit with an error. + (Florian Angeletti, review by Gabriel Scherer) + +- #10438: add a new toplevel cli argument `-e

Module Tiny_httpd_prometheus

Expose metrics over HTTP in the prometheus format

type tags = (string * string) list
module Registry : sig ... end

Registry for metrics.

val global : Registry.t
module Counter : sig ... end

Counters

module Gauge : sig ... end

Gauges

module Histogram : sig ... end
val http_middleware : Registry.t -> Tiny_httpd.Middleware.t

Middleware to get basic metrics about HTTP requests

val add_route_to_server : Tiny_httpd.t -> Registry.t -> unit

Add a "/metrics" route to the server

val instrument_server : Tiny_httpd.t -> Registry.t -> unit

Add middleware and route

module GC_metrics : sig ... end
+Tiny_httpd_prometheus (tiny_httpd.Tiny_httpd_prometheus)

Module Tiny_httpd_prometheus

Expose metrics over HTTP in the prometheus format.

This sub-library tiny_httpd.prometheus provides definitions for counters, gauges, and histogram, and endpoints to expose them for Prometheus to scrape them.

type tags = (string * string) list
module Registry : sig ... end

Registry for metrics.

val global : Registry.t
module Counter : sig ... end

Counters

module Gauge : sig ... end

Gauges

module Histogram : sig ... end
val http_middleware : Registry.t -> Tiny_httpd.Middleware.t

Middleware to get basic metrics about HTTP requests

val add_route_to_server : Tiny_httpd.t -> Registry.t -> unit

Add a "/metrics" route to the server

val instrument_server : Tiny_httpd.t -> Registry.t -> unit

Add middleware and route

module GC_metrics : sig ... end
diff --git a/tiny_httpd/index.html b/tiny_httpd/index.html index 87c72727..f2c4ca1f 100644 --- a/tiny_httpd/index.html +++ b/tiny_httpd/index.html @@ -1,2 +1,2 @@ -index (tiny_httpd.index)

Package tiny_httpd

Package info

changes-files
readme-files
+index (tiny_httpd.index)

Package tiny_httpd

Package info

changes-files
readme-files