diff --git a/.nojekyll b/.nojekyll new file mode 100644 index 00000000..e69de29b diff --git a/ocaml/_doc-dir/Changes b/ocaml/_doc-dir/Changes deleted file mode 100644 index 61509659..00000000 --- a/ocaml/_doc-dir/Changes +++ /dev/null @@ -1,13681 +0,0 @@ -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