OCaml release 5.0.0
Florian Angeletti <[email protected]> Fri, 16 Dec 2022 13:21:48 +0100 (CET)
| Newsgroups | gmane.comp.lang.caml.announce |
|---|---|
| Message-ID | <[email protected]> |
--=_7222fbed-f645-435c-a7e6-2d84487f8df4 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Dear OCaml users,=20 We have the pleasure of celebrating the birthdays of Jane Austen and Arthur= C. Clarke by=20 announcing the release of OCaml version 5.0.0.=20 The highlight of this new major version of OCaml is the long-awaited runtim= e support=20 for shared memory parallelism and effect handlers.=20 This multicore support is the culmination of more than 8 years of effort,= =20 and required a full rewrite of the OCaml runtime environment.=20 Consequently, OCaml 5.0.0 is expected to be a more experimental version of= =20 OCaml than the usual OCaml releases.=20 For instance, in this release the native compiler only supports the x86-64 = and arm64 architectures. In terms of operating systems, Linux, BSDs, macOS = and mingw64 on Windows=20 are supported.=20 We are planning to restore the support for most previously supported archit= ectures and operating systems, and address remaining known issues over the = course of the next year.=20 Don't let those words of caution hinder your experimentation with OCaml 5:= =20 OCaml 5 as a language is fully compatible with OCaml 4 down to the performa= nce=20 characteristics of your programs. In other words, any code that works with = OCaml 4 should work the same with OCaml 5.=20 Installation instructions are available below.=20 The currently known exceptions to this rule are:=20 - the removal of many long-deprecated functions and modules=20 - changes to the internal runtime API=20 - the performance of ephemerons is currently (and temporarily) strongly deg= raded.=20 Please report any unexpected behaviours on the OCaml issue tracker=20 (at https://github.com/ocaml/ocaml/issues) and post any questions or commen= ts=20 you might have on our discussion forums (https://discuss.ocaml.org).=20 During the maturing period for OCaml 5, the OCaml 4.14 branch will be maint= ained=20 by backporting bug fixes from the OCaml 5 branch at regular intervals.=20 The next release on the OCaml 4.14 branch, OCaml 4.14.1, should soon follow= this release.=20 The full list of changes can be found in the changelog below.=20 Happy hacking,=20 -- Florian Angeletti for the OCaml team.=20 Installation Instructions=20 -------------------------=20 The base compiler can be installed as an opam switch with the following com= mands:=20 opam update=20 opam switch create 5.0.0=20 It might be also interesting to check the new support for parallelism by in= stalling the `domainslib` library with=20 opam install domainslib=20 The source code for the release candidate is also directly available on:=20 * https://github.com/ocaml/ocaml/archive/5.0.0.tar.gz=20 * https://caml.inria.fr/pub/distrib/ocaml-5.0/ocaml-5.0.0.tar.gz=20 ### Fine-Tuned Compiler Configuration=20 If you want to tweak the configuration of the compiler, you can switch to t= he option variant with:=20 opam update=20 opam switch create <switch_name> ocaml-variants.5.0.0+options <option_list>= =20 where `<option_list>` is a comma-separated list of `ocaml-option-*` package= s. For instance, for a `flambda` and `no-flat-float-array` switch:=20 opam switch create 5.0.0+flambda+nffa ocaml-variants.5.0.0+options ocaml-op= tion-flambda ocaml-option-no-flat-float-array=20 The command line above is slightly more complicated for opam versions befor= e 2.1:=20 opam update=20 opam switch create <switch_name> --packages=3Docaml-variants.5.0.0+options,= <option_list>=20 In both cases, all available options can be listed with `opam search ocaml-= option`.=20 New manual sections:=20 --------------------=20 - Parallel programming (https://v2.ocaml.org/releases/5.0/manual/parallelis= m.html)=20 - Memory model: The hard bits (https://v2.ocaml.org/releases/5.0/manual/mem= orymodel.html)=20 - Effect handlers (https://v2.ocaml.org/releases/5.0/manual/effects.html)= =20 Changelog for OCaml 5.0.0 (16 December 2022)=20 --------------------------------------------=20 - #10831: Multicore OCaml=20 (Enguerrand Decorne, Stephen Dolan, Tom Kelly, Sadiq Jaffer,=20 Anil Madhavapeddy, Sudha Parimala, KC Sivaramakrishnan,=20 Leo White, the Tarides multicore team,=20 review by Florian Angeletti, Damien Doligez, Xavier Leroy,=20 Guillaume Munch-Maccagnoni, Olivier Nicole, Nicol=C3=A1s Ojeda B=C3=A4r,=20 Gabriel Scherer, the OCaml core development team, and many=20 other valued reviewers.)=20 ### Language features:=20 ### Runtime system:=20 - #11400: Runtime events counters fixes=20 Fixes mismatch between OCaml and C APIs, removes events from 4.x that=20 are not present in the 5.0 GC and adds some missing probes.=20 (Sadiq Jaffer, review by Gabriel Scherer, Florian Angeletti)=20 - #11368: Runtime events buffer size OCAMLRUNPARAMS fix=20 The runtime events buffer size can now be set via the 'e' OCAMLRUNPARAM.=20 This is previously mistakenly enabled/disabled tracing instead.=20 (Sadiq Jaffer, review by KC Sivaramakrishnan, David Allsopp, Damien Doligez= )=20 - #11308: Add environment variable to preserve runtime_events after exit=20 If the environment variable OCAML_RUNTIME_EVENTS_PRESERVE exists then the= =20 runtime will not remove the runtime events ring buffers at exit. This=20 makes tracing very short running programs more reliable.=20 (Sadiq Jaffer, review by KC Sivaramakrishnan)=20 - #10964: Ring-buffer based runtime tracing (runtime_events)=20 Runtime_events is a very low overhead runtime tracing system designed for= =20 continuous monitoring of OCaml applications.=20 (Sadiq Jaffer, review by Anil Madhavapeddy, Enguerrand Decorne,=20 Richard Warburton, Gabriel Scherer, Sabine Schmaltz, Florian Angeletti,=20 Patrick Ferris, Tom Kelly)=20 * #10723: do not use `-flat-namespace` linking for macOS.=20 (Carlo Cabrera, review by Damien Doligez)=20 * #10863, #10933: Remove support for old, unprefixed C runtime function nam= es=20 such as `alloc`. The new names prefixed with `caml_` must be used instead,= =20 such as `caml_alloc`. Consequently, it is no longer needed to define=20 `CAML_NAME_SPACE` to avoid bringing unprefixed names into scope: this is no= w=20 the default behavior.=20 (Nicol=C3=A1s Ojeda B=C3=A4r, review by Xavier Leroy)=20 - #10902: Do not register empty code fragments in natdynlink.=20 (David Allsopp, review by Xavier Leroy and Damien Doligez)=20 - #10965: `caml_fatal_error_hook`, GC timing hooks, and=20 `caml_scan_roots_hook` are now atomic variables. Restore GC timing=20 hooks in multicore.=20 (Guillaume Munch-Maccagnoni, review by Enguerrand Decorne, Xavier=20 Leroy, Gabriel Scherer, and KC Sivaramakrishnan)=20 - #11209: Add a public and thread-safe timing hook running at domain=20 termination, after this domain has stopped running any OCaml code:=20 `caml_domain_terminated_hook`. This can be useful for implementing=20 domain-local state in C.=20 (Guillaume Munch-Maccagnoni, review by Xavier Leroy and Gabriel=20 Scherer)=20 - #10875, #11731: Add option to allocate fiber stacks and sigaltstacks with= =20 mmap(MAP_STACK) instead of malloc. This is exposed via a configure=20 --enable-mmap-map-stack option, and is enabled by default on OpenBSD where= =20 it is mandatory.=20 (Anil Madhavapeddy, review by Gabriel Scherer, Tom Kelly,=20 Michael Hendricks and KC Sivaramakrishnan).=20 - #10950: Do not use mmap to allocate Caml_state.=20 In order to reduce virtual memory usage, we dynamically allocate=20 the domain_state structure.=20 (Enguerrand Decorne, KC Sivaramakrishnan and Tom Kelly,=20 review by Anil Madhavapeddy and Gabriel Scherer)=20 - #11010: Use strerror_r for reentrant error string conversion.=20 (Anil Madhavapeddy and Xavier Leroy, review by same and Edwin T=C3=B6r=C3= =B6k)=20 - #11002, #11066, #11086: Do not use Begin_roots/End_roots macros in=20 the runtime system. Also fix a missing root registration in the=20 implementation of Unix.write on Windows.=20 (Nicol=C3=A1s Ojeda B=C3=A4r, Daniel B=C3=BCnzli and Antonin D=C3=A9cimo,= =20 review by Xavier Leroy and David Allsopp)=20 - #11022: Track GC work for all managed bigarray allocations=20 (Stephen Dolan, report by Andrew Hunter, review by Damien Doligez)=20 - #10802: Use 4.12 value macros and helpers in C code=20 (Antonin D=C3=A9cimo, review by Gabriel Scherer)=20 - #11105: Fix handling of fiber stack cache with multiple domains=20 (Jon Ludlam, KC Sivaramakrishnan and Tom Kelly)=20 - #11054: Respect user provided maximum stack space=20 Make sure the stack we initially request is sized accordingly to=20 the user provided settings. tmc/stack_space is also updated by=20 this PR in order to account for this change.=20 (Enguerrand Decorne, report by Jon Ludlam,=20 review by Tom Kelly, KC Sivaramakrishnan and Gabriel Scherer)=20 - #11238: Increase the default limit for the stack size to 128 Mi words,=20 i.e. 1 Gib for 64-bit platforms and 512 Mib for 32-bit platforms.=20 (Xavier Leroy, review by S=C3=A9bastien Hinderer)=20 * #11295: An ISO C 2011 compliant compiler, including full support for atom= ic=20 types, is now required to build the OCaml runtime system.=20 (Xavier Leroy, review by David Allsopp and S=C3=A9bastien Hinderer)=20 - #10915, #11039, #11057, #11095, #11190: Implement quality treatment for= =20 asynchronous actions in multicore. Reimplement the old behaviour of=20 `caml_process_pending*` for multicore.=20 (Guillaume Munch-Maccagnoni, review by Sadiq Jaffer and Gabriel Scherer)=20 - #11303: Ensure that GC is not invoked from bounds check failures=20 (Stephen Dolan, review by Sadiq Jaffer and Xavier Leroy)=20 - #11304: Fix data race on Windows file descriptors=20 (Olivier Nicole and Xavier Leroy, review by Xavier Leroy, David Allsopp,=20 and Sadiq Jaffer)=20 * #11337: pass 'flags' metadata to root scanners, to optimize stack=20 scanning in the bytecode interpreter.=20 Changes the interface of user-provided root-scanning hooks.=20 (Gabriel Scherer, review by Xavier Leroy,=20 Guillaume Munch-Maccagnoni, Sadiq Jaffer and Tom Kelly)=20 - #11144: Restore frame-pointers support for amd64=20 (Fabrice Buoro, review by Frederic Bour and KC Sivaramakrishnan)=20 * #11255: in the C interface, `&Field(v, i)` now has type `volatile value *= `=20 instead of `value *` in OCaml 4. This makes the memory model=20 for mixed OCaml/C code better defined, but can cause warnings or type=20 errors in user C code.=20 (KC Sivaramakrishnan, review by Xavier Leroy, Gabriel Scherer and=20 Guillaume Munch-Maccagnoni, additional discussions with Stephen=20 Dolan and Luc Maranget)=20 - #5299, #4787, #11138, #11272, #11506: To help debugging, `Caml_state`=20 now dynamically checks that the domain lock is held, and fails=20 otherwise (with a fatal error at most entry points of the C API, or=20 systematically in debug mode). A new variable `Caml_state_opt` is=20 introduced, and is `NULL` when the domain lock is not held. This=20 allows to test from C code if the current thread holds the lock of=20 its domain.=20 (Guillaume Munch-Maccagnoni, review by Florian Angeletti, Damien=20 Doligez, Sadiq Jaffer, Xavier Leroy, and Gabriel Scherer)=20 - #11223: The serialization format of custom blocks changed in 4.08,=20 but the deserializer would still support the pre-4.08 format. OCaml=20 5.x removed support for this old format; provide a clear error message=20 in this case.=20 (Hugo Heuzard, review by Gabriel Scherer)=20 - #11504, #11522: Use static allocation in `caml_make_float_vect` in=20 no-flat-float-array mode, it's more efficient and avoids a a race condition= =20 (Xavier Leroy, report by Guillaume Munch-Maccagnoni, review by David Allsop= p)=20 - #11652: Fix benign off-by-one error in Windows implementation of caml_mem= _map.=20 (David Allsopp, review by Gabriel Scherer)=20 - #11669, #11704: Fix construction of Effect.Unhandled exceptions in the=20 bytecode interpreter.=20 (David Allsopp and Xavier Leroy, report by Samuel Hym, review by Xavier Ler= oy=20 and Gabriel Scherer)=20 ### Code generation and optimizations:=20 - #10972: ARM64 multicore support: OCaml & C stack separation;=20 dynamic stack size checks; fiber and effects support.=20 (Tom Kelly and Xavier Leroy, review by KC Sivaramakrishnan, Xavier Leroy=20 Guillaume Munch-Maccagnoni, Eduardo Rafael, Stephen Dolan and=20 Gabriel Scherer)=20 * #10845 Emit frametable size on amd64 BSD (OpenBSD, FreeBSD, NetBSD) syste= ms=20 (emitted for Linux in #8805)=20 (Hannes Mehnert, review by Nicol=C3=A1s Ojeda B=C3=A4r)=20 ### Standard library:=20 - #10742: Use LXM as the pseudo-random number generator for module Random.= =20 Add `Random.State.split` and `Random.split` to "split" a PRNG off=20 another PRNG.=20 (Xavier Leroy, review by Gabriel Scherer and Hugo Heuzard)=20 * #10867, #11345: Remove deprecated values: Array.create, Array.make_float,= =20 Array.create_matrix, Bytes.uppercase, Bytes.lowercase, Bytes.capitalize,=20 Bytes.uncapitalize, Char.lowercase, Char.uppercase, Filename.temp_dir_name,= =20 Int32.format, Int64.format, Nativeint.format, Format.bprintf, Format.kprint= f,=20 Format.set_all_formatter_output_functions,=20 Format.get_all_formatter_output_functions,=20 Format.pp_set_all_formatter_output_functions,=20 Format.pp_get_all_formatter_output_functions, Format.pp_open_tag,=20 Format.pp_close_tag, Format.open_tag, Format.close_tag,=20 Format.formatter_tag_functions, Format.pp_set_formatter_tag_functions,=20 Format.pp_get_formatter_tag_functions, Format.set_formatter_tag_functions,= =20 Format.get_formatter_tag_functions, Gc (mutability of the fields of type=20 Gc.control), Lazy.lazy_from_fun, Lazy.lazy_from_val, Lazy.lazy_is_val,=20 Obj.set_tag, Obj.truncate, Obj.final_tag, Obj.extension_constructor,=20 Obj.extension_name, Obj.extension_id, Scanf.stdib, Scanf.fscanf,=20 Scanf.kfscanf, Stdlib.( & ), Stdlib.( or ), String.set, String.copy,=20 String.fill, String.unsafe_set, String.unsafe_fill, String.uppercase,=20 String.lowercase, String.capitalize, String.uncapitalize, Thread.kill,=20 Thread.wait_write, Thread.wait_read, the whole ThreadUnix module, the=20 infix operator (.[]<-).=20 (Nicol=C3=A1s Ojeda B=C3=A4r, review by Damien Doligez)=20 * #10896: Remove Stream, Genlex and Pervasives. Also remove legacy standalo= ne=20 bigarray library (the Bigarray module is now part of the standard library).= =20 (Nicol=C3=A1s Ojeda B=C3=A4r, review by Kate Deplaix and Anil Madhavapeddy)= =20 - #10921: Use getentropy, when available, to seed the generator during=20 `Random.self_init`=20 (Michael Hendricks, review by Gabriel Scherer, Xavier Leroy, and=20 Anil Madhavapeddy)=20 * #10924: Add deprecated attribute to Printexc.catch, Printf.kprintf and=20 Unix.SO_ERROR.=20 (Nicol=C3=A1s Ojeda B=C3=A4r, review by Damien Doligez)=20 - #10986: Add Scanf.sscanf_opt, Scanf.bscanf_opt and Scanf.scanf_opt.=20 (Nicol=C3=A1s Ojeda B=C3=A4r, review by Florian Angeletti and Gabriel Scher= er)=20 * #11157: Rename "hash" in the "Hashtbl.SeededHashedType" signature to=20 "seeded_hash". This allows defining both seeded and unseeded hash functions= in=20 the same module.=20 (Nicol=C3=A1s Ojeda B=C3=A4r, review by Gabriel Scherer and Xavier Leroy)= =20 - #8878: Add String.hash and String.seeded_hash.=20 (Tom Kelly, review by Alain Frisch and Nicol=C3=A1s Ojeda B=C3=A4r)=20 ### Other libraries:=20 * #9071, #9100, #10935: Reimplement `Thread.exit()` as raising the=20 exception `Thread.Exit`, and mark `Thread.exit` as deprecated.=20 The new implementation changes the behavior compared with=20 the OCaml 4 implementation. For example, the new implementation=20 causes `Fun.finally` finalizers to be run and catch-all exception=20 handlers to prevent termination.=20 (Jacques-Henri Jourdan and Xavier Leroy, review by Damien Doligez,=20 Guillaume Munch-Maccagnoni, Gabriel Scherer, and Enguerrand Decorne)=20 - #11034: Dynlink library, add a global lock to make dynlinking=20 thread-safe.=20 (Florian Angeletti, review by Gabriel Scherer)=20 - #11087: deprecate Thread.wait_timed_read, Thread.wait_timed_write,=20 Thread.select, Thread.wait_pid. The same functionality is available in the= =20 Unix module.=20 (Nicol=C3=A1s Ojeda B=C3=A4r, review by Anil Madhavapeddy)=20 - #11309, #11424, #11427, #11545: Add Domain.recommended_domain_count.=20 (Christiano Haesbaert, Konstantin Belousov, review by David Allsopp,=20 KC Sivaramakrishnan, Gabriel Scherer, Nicolas Ojeda Bar)=20 - #11461, #11466: Fix gethostbyaddr for IPv6 arguments and make it domain-s= afe=20 (Olivier Nicole, Nicol=C3=A1s Ojeda B=C3=A4r, David Allsopp and Xavier Lero= y,=20 review by the same)=20 - #11479: Make Unix.symlink domain-safe on Windows=20 (Olivier Nicole, review by Xavier Leroy and David Allsopp)=20 ### Tools:=20 * #11004: Litmus tests for checking the implementation of the=20 memory model.=20 (Luc Maranget, review by Gabriel Scherer and Xavier Leroy)=20 - #11024: Handle alerts in ocamldoc.=20 The alert `[@@alert deprecated]` is handled specifically and it's no longer= =20 needed to duplicate the deprecated annotation (the alert for the compiler a= nd=20 the tag for the documentation). Every other alerts also appear in the=20 documentation.=20 (Jules Aguillon, review by Florian Angeletti)=20 - #11065: Port the bytecode debugger to 5.0, adding support for effect hand= lers.=20 (Damien Doligez and @fabbing, review by @fabbing and Xavier Leroy)=20 - #11079: Add the -nobanners option to dumpobj.=20 (S=C3=A9bastien Hinderer, review by Gabriel Scherer and Vincent Laviron)=20 - #11100: Fix ocamltest to make sure failed tests are not counted as=20 "unexpected error".=20 (Damien Doligez, review by S=C3=A9bastien Hinderer)=20 - #11245: Merge the common code of ocamlcp and ocamloptp into a single modu= le.=20 (David Allsopp, review by S=C3=A9bastien Hinderer)=20 - #11382: OCamlmktop use a new initialization module "OCamlmktop_init" to= =20 preserve backward-compatibility with user-module provided modules that inst= all=20 toplevel printers.=20 (Florian Angeletti, review by Gabriel Scherer and David Allsopp)=20 ### Manual and documentation:=20 - #11058: runtime/HACKING.adoc tips on debugging the runtime=20 (Gabriel Scherer, review by Enguerrand Decorne and Nicol=C3=A1s Ojeda B=C3= =A4r)=20 - #11093: Add an effect handlers tutorial=20 (KC Sivaramakrishnan, review by Fran=C3=A7ois Pottier, Gabriel Scherer, Fra= n=C3=A7ois=20 Bobot and Wiktor Kuchta)=20 - #11192: Better documentation for condition variables.=20 (Fran=C3=A7ois Pottier, review by Luc Maranget, Xavier Leroy, and Wiktor Ku= chta)=20 - #11093: Add tutorials on parallelism features and the relaxed memory mode= l=20 (KC Sivaramakrishnan, review by Damien Doligez, Anil Madhavapeddy, Gabriel= =20 Scherer, Thomas Leonard, Tom Ridge, Xavier Leroy, Luc Maranget, Fabrice=20 Buoro, Olivier Nicole, Guillaume Munch-Maccagnoni, Jacques-Henri Jourdan)= =20 - #11640: Add Flambda commonly-used options to the ocamlopt manpage=20 (Amandine Nangah, review by David Allsopp, Florian Angeletti,=20 S=C3=A9bastien Hinderer, and Vincent Laviron)=20 - #11676: Fix missing since annotation in the `Sys` and `Format` modules=20 (Github user Bukolab99, review by Florian Angeletti)=20 - #11813: Make new multicore chapters easier to discover, and emphasize imp= act=20 on C bindings.=20 (Edwin T=C3=B6r=C3=B6k, review by KC Sivaramakrishnan, and Florian Angelett= i)=20 ### Compiler user-interface and warnings:=20 - #9140, #11131: New command-line flag -nocwd to not include implicit=20 the current directory to the load path.=20 (Thomas Roglin, review by Gabriel Scherer and Nicol=C3=A1s Ojeda B=C3=A4r)= =20 - #11089: Add 'since <version>' information to compiler warnings.=20 (Andr=C3=A9 Maroneze, review by Florian Angeletti and Gabriel Scherer)=20 - #10909: Disable warning 59 (assignment to immutable blocks) unless flambd= a=20 invariant checks are enabled.=20 (Vincent Laviron, review by Gabriel Scherer)=20 - #10981, #11276: Implement a -cmi-file option for ocamlc and ocamlopt.=20 (S=C3=A9bastien Hinderer, review by Damien Doligez, Daniel B=C3=BCnzli and= =20 Florian Angeletti)=20 * #11049: Stop padding 1-digit compiler minor version numbers.=20 (So for instance OCaml 5.0 rather than 5.00)=20 (S=C3=A9bastien Hinderer, review by David Allsopp, Florian Angeletti and=20 Xavier Leroy)=20 - #11184, #11670: Stop calling ranlib on created / installed libraries=20 (S=C3=A9bastien Hinderer and Xavier Leroy, review by the same)=20 - #11253: Deprecate `ocaml script` and `ocamlnat` script where `script` has= no=20 extension and is an implicit basename.=20 (David Allsopp, review by Florian Angeletti and S=C3=A9bastien Hinderer)=20 ### Internal/compiler-libs changes:=20 - #10878, #10909: restore flambda after the Multicore merge.=20 (Vincent Laviron, review by Gabriel Scherer and Xavier Leroy)=20 - #10864, #10888: restore afl-fuzz mode for sequential programs.=20 (Jan Midtgaard, review by Xavier Leroy and Gabriel Scherer)=20 - #11008, #11047: rework GC statistics in the Multicore runtime=20 (Gabriel Scherer, review by Enguerrand Decorne)=20 - #11058: basic debugging documentation in runtime/HACKING.adoc=20 (Gabriel Scherer, review by Enguerrand Decorne and Nicol=C3=A1s Ojeda B=C3= =A4r)=20 - #11199: Stop installing topdirs.cmi twice. The toplevel now reads topdirs= .cmi=20 from +compiler-libs, as the debugger does.=20 (David Allsopp, review by S=C3=A9bastien Hinderer)=20 - #11007, #11399: META files for the stdlib, compiler-libs and other librar= ies=20 (unix, dynlink, str, runtime_events, threads, ocamldoc) are now installed= =20 along with the compiler.=20 (David Allsopp, Florian Angeletti, Nicol=C3=A1s Ojeda B=C3=A4r and S=C3=A9b= astien Hinderer,=20 review by Daniel B=C3=BCnzli, Kate Deplaix, Anil Madhavapeddy and Gabriel S= cherer)=20 ### Build system:=20 * #10893: Remove configuration options --disable-force-safe-string and=20 DEFAULT_STRING=3Dunsafe as well as --enable-force-safe-string and=20 DEFAULT_STRING=3Dsafe which are now the default unconditionally.=20 (Kate Deplaix, review by Gabriel Scherer and David Allsopp)=20 - #11092: Build native-code compilers on OpenBSD/aarch64.=20 (Christopher Zimmermann, review by Anil Madhavapeddy)=20 - #11126: Build system: make it possible to choose which ocamldep=20 (and flags) to use when computing dependencies for the compiler.=20 Add a -no-slash option to ocamldep to let users override -slash.=20 (S=C3=A9bastien Hinderer, review by David Allsopp)=20 - #11147: Factorize the stdlib-related compilation flags. Make it=20 possible to control them consistently through the STDLIBFLAGS=20 build variable. Make sure ocamldoc and ocamllex get compiled and=20 linked with debugging information (-g).=20 (S=C3=A9bastien Hinderer, review by Gabriel Scherer)=20 - #11149: Make the bootstrap process reproducible on systems with non-big-e= ndian=20 floating point. If the boot/ artefacts are up-to-date, this means that runn= ing=20 make bootstrap on any platform should not change the images in boot/ and pa= ves=20 the way for automated testing that the bootstrap is repeatable.=20 (David Allsopp, review by Damien Doligez and S=C3=A9bastien Hinderer)=20 - #11160: otherlibs: merge win32unix into unix.=20 (S=C3=A9bastien Hinderer, review by David Allsopp, Nicol=C3=A1s Ojeda B=C3= =A4r,=20 Xavier Leroy, Vincent Laviron and Antonin D=C3=A9cimo)=20 * #11198, #11298: Install the Dynlink, Str and Unix libraries to individual= =20 subdirectories of LIBDIR. The compiler, debugger and toplevel automatically= =20 add `-I +lib` if required, but display an alert.=20 (David Allsopp, review by Florian Angeletti, Nicol=C3=A1s Ojeda B=C3=A4r,= =20 Valentin Gatien-Baron and S=C3=A9bastien Hinderer)=20 - #11200: Install ocamlprof's Profiling runtime module to a +profiling,=20 removing it from the default namespace.=20 (David Allsopp, review by S=C3=A9bastien Hinderer)=20 - #11294: Switch minimum required autoconf to 2.71.=20 (David Allsopp, review by Xavier Leroy)=20 - #11370, #11373: Don't pass CFLAGS to flexlink during configure.=20 (David Allsopp, report by William Hu, review by Xavier Leroy and=20 S=C3=A9bastien Hinderer)=20 - #11487: Thwart FMA test optimization during configure=20 (William Hu, review by David Allsopp and S=C3=A9bastien Hinderer)=20 - #11097: Build native-code compilers on NetBSD/aarch64=20 (Kate Deplaix, review by Anil Madhavapeddy)=20 ### Bug fixes:=20 - #10768, #11340: Fix typechecking regression when combining first class=20 modules and GADTs.=20 (Jacques Garrigue, report by Fran=C3=A7ois Thir=C3=A9, review by Matthew Ry= an)=20 - #10790: don't drop variance and injectivity annotations when pretty print= ing=20 `with` constraints (for example, `with type +!'a t =3D ...`).=20 (Florian Angeletti, report by Luke Maurer, review by Matthew Ryan and=20 Gabriel Scherer)=20 - #11167: Fix memory leak from signal stack.=20 (Antoni =C5=BBewier=C5=BCejew, review by Gabriel Scherer and Enguerrand Dec= orne)=20 - #11112: harden -use-runtime against spaces or quotes in the provided path= =20 (Gabriel Scherer, report by Brahima Dibassi, review by David Allsopp)=20 - #11068, #11070: Fix typo in function name given in Unix_error exception f= or=20 Unix.readlink on Windows.=20 (David Allsopp, report by Xia Li-yao)=20 - #10807: Don't duplicate standard handles in the child process=20 spawned by win32unix Unix.create_process if the handles were already=20 inheritable. Fix broken signalling of EOF on standard handles if=20 they were already inheritable.=20 (Antonin D=C3=A9cimo, review by Xavier Leroy and Nicol=C3=A1s Ojeda B=C3=A4= r)=20 - #10868: Fix off-by-1 bug when initializing frame hashtables=20 (Jonah Beckford, review by Tom Kelly, Nicol=C3=A1s Ojeda B=C3=A4r and=20 KC Sivaramakrishnan)=20 - #11077: Make dumpobj compatible with absence of naked pointer support=20 (Olivier Nicole and Jan Midtgaard, review by Gabriel Scherer)=20 - #11111: fix fork() usage in ocamltest C code.=20 When calling fork() from C code with the Multicore runtime active,=20 one needs to call caml_atfork_hook() on the forked child before it=20 can use the OCaml runtime.=20 (Gabriel Scherer, review by Xavier Leroy, report by Brahima Dibassi)=20 - #10809: Use the WSA_FLAG_NO_HANDLE_INHERIT on Windows when creating=20 sockets with WSASocket if the cloexec (non-inheritable) parameter is=20 true. Fixes a race condition where a child process could inherit the=20 socket and deadlock the parent.=20 (Antonin D=C3=A9cimo, review by Xavier Leroy)=20 - #11194, #11609: Fix inconsistent type variable names in "unbound type var= "=20 messages=20 (Ulysse G=C3=A9rard and Florian Angeletti, review Florian Angeletti and=20 Gabriel Scherer)=20 - #11204: Fix regression introduced in 4.14.0 that would trigger Warning 17= when=20 calling virtual methods introduced by constraining the self type from withi= n=20 the class definition.=20 (Nicol=C3=A1s Ojeda B=C3=A4r, review by Leo White)=20 - #11263, #11267: caml/misc.h: check whether `_MSC_VER` is defined before u= sing=20 it to ensure that the headers can always be used in code which turns on=20 -Wundef (or equivalent).=20 (David Allsopp and Nicol=C3=A1s Ojeda B=C3=A4r, review by Nicol=C3=A1s Ojed= a B=C3=A4r and=20 S=C3=A9bastien Hinderer)=20 - #11289, #11405: fix some leaks on systhread termination=20 (Fabrice Buoro, Enguerrand Decorne, Gabriel Scherer,=20 review by Xavier Leroy and Florian Angeletti, report by Romain Beauxis)=20 - #11314, #11416: fix non-informative error message for module inclusion=20 (Florian Angeletti, report by Thierry Martinez, review by Gabriel Scherer)= =20 - #11358, #11379: Refactor the initialization of bytecode threading,=20 This avoids a "dangling pointer" warning of GCC 12.1.=20 (Xavier Leroy, report by Arma=C3=ABl Gu=C3=A9neau, review by Gabriel Schere= r)=20 - #11387, module type with constraints no longer crash the compiler in pres= ence=20 of both shadowing warnings and the `-bin-annot` compiler flag.=20 (Florian Angeletti, report by Christophe Raffalli, review by Gabriel Schere= r)=20 - #11392, #11392: assertion failure with -rectypes and external definitions= =20 (Gabriel Scherer, review by Florian Angeletti, report by Dmitrii Kosarev)= =20 - #11417: Fix regression allowing virtual methods in non-virtual classes.= =20 (Leo White, review by Florian Angeletti)=20 - #11468: Fix regression from #10186 (OCaml 4.13) detecting IPv6 on Windows= for=20 mingw-w64 i686 port.=20 (David Allsopp, review by Xavier Leroy and S=C3=A9bastien Hinderer)=20 - #11482, #11542: Fix random crash in large closure allocation=20 (Damien Doligez, report by Thierry Martinez and Vincent Laviron, review by= =20 Xavier Leroy)=20 - #11508, #11509: make Bytes.escaped domain-safe=20 (Christiano Haesbaert and Gabriel Scherer,=20 review by Xavier Leroy,=20 report by Jan Midtgaard and Tom Kelly)=20 - #11516, #11524: Fix the `deprecated_mutable` attribute.=20 (Chris Casinghino, review by Nicol=C3=A1s Ojeda B=C3=A4r and Florian Angele= tti)=20 - #11576: Fix bug in Bigarray.Genarray.init in the the case of zero-dimensi= onal=20 arrays.=20 (Nicol=C3=A1s Ojeda B=C3=A4r, Jeremy Yallop, report by Masayuki Takeda, rev= iew by Jeremy=20 Yallop and Florian Angeletti)=20 - #11587: Prevent integer comparison from being used on pointers=20 (Vincent Laviron, review by Gabriel Scherer)=20 - #11622: Prevent stack overflow when printing a constructor or record=20 mismatch error involving recursive types.=20 (Florian Angeletti, review by Gabriel Scherer)=20 - #11662, #11673: fix a memory leak when using Dynlink,=20 the bug was only present in development version of OCaml 5.=20 (Stephen Dolan, report by Andre Maroneze, review by Gabriel Scherer)=20 - #11732: Ensure that types from packed modules are always generalised=20 (Stephen Dolan and Leo White, review by Jacques Garrigue)=20 - #11737: Fix segfault condition in Unix.stat under Windows in the presence= of=20 multiple threads.=20 (Marc Lasson, Nicol=C3=A1s Ojeda B=C3=A4r, review by Gabriel Scherer and Da= vid Allsopp)=20 - #11776: Extend environment with functor parameters in `strengthen_lazy`.= =20 (Chris Casinghino and Luke Maurer, review by Gabriel Scherer)=20 - #11533, #11534: follow synonyms again in #show_module_type=20 (this had stopped working in 4.14.0)=20 (Gabriel Scherer, review by Jacques Garrigue, report by Yaron Minsky)=20 --=_7222fbed-f645-435c-a7e6-2d84487f8df4 Content-Type: text/html; charset=utf-8 Content-Transfer-Encoding: quoted-printable <html><body><div style=3D"font-family: arial, helvetica, sans-serif; font-s= ize: 12pt; color: #000000"><div><div>Dear OCaml users,<br><br>We have the p= leasure of celebrating the birthdays of Jane Austen and Arthur C. Clarke by= <br>announcing the release of OCaml version 5.0.0.<br><br>The highlight of = this new major version of OCaml is the long-awaited runtime support<br>for = shared memory parallelism and effect handlers.<br><br>This multicore suppor= t is the culmination of more than 8 years of effort,<br>and required a full= rewrite of the OCaml runtime environment.<br>Consequently, OCaml 5.0.0 is = expected to be a more experimental version of<br>OCaml than the usual OCaml= releases.<br><br>For instance, in this release the native compiler only su= pports the x86-64 and arm64 architectures. In terms of operating systems, L= inux, BSDs, macOS and mingw64 on Windows<br>are supported.<br><br>We are pl= anning to restore the support for most previously supported architectures a= nd operating systems, and address remaining known issues over the course of= the next year.<br><br>Don't let those words of caution hinder your experim= entation with OCaml 5:<br>OCaml 5 as a language is fully compatible with OC= aml 4 down to the performance<br>characteristics of your programs. In other= words, any code that works with OCaml 4 should work the same with OCaml 5.= <br>Installation instructions are available below.<br><br>The currently kno= wn exceptions to this rule are:<br>- the removal of many long-deprecated fu= nctions and modules<br>- changes to the internal runtime API<br>- the perfo= rmance of ephemerons is currently (and temporarily) strongly degraded.<br><= br>Please report any unexpected behaviours on the OCaml issue tracker<br>(a= t https://github.com/ocaml/ocaml/issues) and post any questions or comments= <br>you might have on our discussion forums (https://discuss.ocaml.org).<br= ><br>During the maturing period for OCaml 5, the OCaml 4.14 branch will be = maintained<br>by backporting bug fixes from the OCaml 5 branch at regular i= ntervals.<br>The next release on the OCaml 4.14 branch, OCaml 4.14.1, shoul= d soon follow this release.<br><br>The full list of changes can be found in= the changelog below.<br><br>Happy hacking,<br><br>-- Florian Angeletti for= the OCaml team.<br><br><br><br>Installation Instructions<br>--------------= -----------<br><br>The base compiler can be installed as an opam switch wit= h the following commands:<br><br>opam update<br>opam switch create 5.0.0<br= ><br><br>It might be also interesting to check the new support for parallel= ism by installing the `domainslib` library with<br><br>opam install domains= lib<br><br>The source code for the release candidate is also directly avail= able on:<br><br>* https://github.com/ocaml/ocaml/archive/5.0.0.tar.gz<br>* = https://caml.inria.fr/pub/distrib/ocaml-5.0/ocaml-5.0.0.tar.gz<br><br>### F= ine-Tuned Compiler Configuration<br><br>If you want to tweak the configurat= ion of the compiler, you can switch to the option variant with:<br><br>opam= update<br>opam switch create <switch_name> ocaml-variants.5.0.0+opti= ons <option_list><br><br>where `<option_list>` is a comma-separ= ated list of `ocaml-option-*` packages. For instance, for a `flambda` and `= no-flat-float-array` switch:<br><br>opam switch create 5.0.0+flambda+nffa o= caml-variants.5.0.0+options ocaml-option-flambda ocaml-option-no-flat-float= -array<br><br><br>The command line above is slightly more complicated for o= pam versions before 2.1:<br><br><br>opam update<br>opam switch create <s= witch_name> --packages=3Docaml-variants.5.0.0+options,<option_list>= ;<br><br>In both cases, all available options can be listed with `opam sear= ch ocaml-option`.<br><br>New manual sections:<br>--------------------<br><b= r>- Parallel programming (https://v2.ocaml.org/releases/5.0/manual/parallel= ism.html)<br>- Memory model: The hard bits (https://v2.ocaml.org/releases/5= .0/manual/memorymodel.html)<br>- Effect handlers (https://v2.ocaml.org/rele= ases/5.0/manual/effects.html)<br><br><br>Changelog for OCaml 5.0.0 (16 Dece= mber 2022)<br>--------------------------------------------<br><br><br>- #10= 831: Multicore OCaml<br> (Enguerrand Decorne, Stephen Dolan, Tom Kell= y, Sadiq Jaffer,<br> Anil Madhavapeddy, Sudha Parimala, KC Sivaramakr= ishnan,<br> Leo White, the Tarides multicore team,<br> review b= y Florian Angeletti, Damien Doligez, Xavier Leroy,<br> Guillaume Munc= h-Maccagnoni, Olivier Nicole, Nicol=C3=A1s Ojeda B=C3=A4r,<br> Gabrie= l Scherer, the OCaml core development team, and many<br> other valued= reviewers.)<br><br>### Language features:<br><br>### Runtime system:<br><b= r>- #11400: Runtime events counters fixes<br> Fixes mismatch between = OCaml and C APIs, removes events from 4.x that<br> are not present in= the 5.0 GC and adds some missing probes.<br> (Sadiq Jaffer, review b= y Gabriel Scherer, Florian Angeletti)<br><br>- #11368: Runtime events buffe= r size OCAMLRUNPARAMS fix<br> The runtime events buffer size can now = be set via the 'e' OCAMLRUNPARAM.<br> This is previously mistakenly e= nabled/disabled tracing instead.<br> (Sadiq Jaffer, review by KC Siva= ramakrishnan, David Allsopp, Damien Doligez)<br><br>- #11308: Add environme= nt variable to preserve runtime_events after exit<br> If the environm= ent variable OCAML_RUNTIME_EVENTS_PRESERVE exists then the<br> runtim= e will not remove the runtime events ring buffers at exit. This<br> m= akes tracing very short running programs more reliable.<br> (Sadiq Ja= ffer, review by KC Sivaramakrishnan)<br><br>- #10964: Ring-buffer based run= time tracing (runtime_events)<br> Runtime_events is a very low overhe= ad runtime tracing system designed for<br> continuous monitoring of O= Caml applications.<br> (Sadiq Jaffer, review by Anil Madhavapeddy, En= guerrand Decorne,<br> Richard Warburton, Gabriel Scherer, Sabine Schm= altz, Florian Angeletti,<br> Patrick Ferris, Tom Kelly)<br><br>* #107= 23: do not use `-flat-namespace` linking for macOS.<br> (Carlo Cabrer= a, review by Damien Doligez)<br><br>* #10863, #10933: Remove support for ol= d, unprefixed C runtime function names<br> such as `alloc`. The= new names prefixed with `caml_` must be used instead,<br> such as `c= aml_alloc`. Consequently, it is no longer needed to define<br> = `CAML_NAME_SPACE` to avoid bringing unprefixed names into scope: this is no= w<br> the default behavior.<br> (Nicol=C3=A1s Ojeda B=C3=A4r, r= eview by Xavier Leroy)<br><br>- #10902: Do not register empty code fragment= s in natdynlink.<br> (David Allsopp, review by Xavier Leroy and Damie= n Doligez)<br><br>- #10965: `caml_fatal_error_hook`, GC timing hooks, and<b= r> `caml_scan_roots_hook` are now atomic variables. Restore GC timing= <br> hooks in multicore.<br> (Guillaume Munch-Maccagnoni, revie= w by Enguerrand Decorne, Xavier<br> Leroy, Gabriel Scherer, and KC Si= varamakrishnan)<br><br>- #11209: Add a public and thread-safe timing hook r= unning at domain<br> termination, after this domain has stopped runni= ng any OCaml code:<br> `caml_domain_terminated_hook`. This can be use= ful for implementing<br> domain-local state in C.<br> (Guillaum= e Munch-Maccagnoni, review by Xavier Leroy and Gabriel<br> Scherer)<b= r><br>- #10875, #11731: Add option to allocate fiber stacks and sigaltstack= s with<br> mmap(MAP_STACK) instead of malloc. This is exposed via a c= onfigure<br> --enable-mmap-map-stack option, and is enabled by defaul= t on OpenBSD where<br> it is mandatory.<br> (Anil Madhavapeddy,= review by Gabriel Scherer, Tom Kelly,<br> Michael Hendricks an= d KC Sivaramakrishnan).<br><br>- #10950: Do not use mmap to allocate Caml_s= tate.<br> In order to reduce virtual memory usage, we dynamically all= ocate<br> the domain_state structure.<br> (Enguerrand Decorne, = KC Sivaramakrishnan and Tom Kelly,<br> review by Anil Madhavapeddy an= d Gabriel Scherer)<br><br>- #11010: Use strerror_r for reentrant error stri= ng conversion.<br> (Anil Madhavapeddy and Xavier Leroy, review by sam= e and Edwin T=C3=B6r=C3=B6k)<br><br>- #11002, #11066, #11086: Do not use Be= gin_roots/End_roots macros in<br> the runtime system. Also fix = a missing root registration in the<br> implementation of Unix.write o= n Windows.<br> (Nicol=C3=A1s Ojeda B=C3=A4r, Daniel B=C3=BCnzli and A= ntonin D=C3=A9cimo,<br> review by Xavier Leroy and David Allsop= p)<br><br>- #11022: Track GC work for all managed bigarray allocations<br>&= nbsp; (Stephen Dolan, report by Andrew Hunter, review by Damien Doligez)<br= ><br>- #10802: Use 4.12 value macros and helpers in C code<br> (Anton= in D=C3=A9cimo, review by Gabriel Scherer)<br><br>- #11105: Fix handling of= fiber stack cache with multiple domains<br> (Jon Ludlam, KC Sivarama= krishnan and Tom Kelly)<br><br>- #11054: Respect user provided maximum stac= k space<br> Make sure the stack we initially request is sized accordi= ngly to<br> the user provided settings. tmc/stack_space is also updat= ed by<br> this PR in order to account for this change.<br> (Eng= uerrand Decorne, report by Jon Ludlam,<br> review by Tom Kelly, KC Si= varamakrishnan and Gabriel Scherer)<br><br>- #11238: Increase the default l= imit for the stack size to 128 Mi words,<br> i.e. 1 Gib for 64-bit pl= atforms and 512 Mib for 32-bit platforms.<br> (Xavier Leroy, review b= y S=C3=A9bastien Hinderer)<br><br>* #11295: An ISO C 2011 compliant compile= r, including full support for atomic<br> types, is now required to bu= ild the OCaml runtime system.<br> (Xavier Leroy, review by David Alls= opp and S=C3=A9bastien Hinderer)<br><br>- #10915, #11039, #11057, #11095, #= 11190: Implement quality treatment for<br> asynchronous actions in mu= lticore. Reimplement the old behaviour of<br> `caml_process_pending*`= for multicore.<br> (Guillaume Munch-Maccagnoni, review by Sadiq Jaff= er and Gabriel Scherer)<br><br>- #11303: Ensure that GC is not invoked from= bounds check failures<br> (Stephen Dolan, review by Sadiq Jaffer and= Xavier Leroy)<br><br>- #11304: Fix data race on Windows file descriptors<b= r> (Olivier Nicole and Xavier Leroy, review by Xavier Leroy, David Al= lsopp,<br> and Sadiq Jaffer)<br><br>* #11337: pass 'flags' meta= data to root scanners, to optimize stack<br> scanning in the bytecode= interpreter.<br> Changes the interface of user-provided root-scannin= g hooks.<br> (Gabriel Scherer, review by Xavier Leroy,<br>  = ; Guillaume Munch-Maccagnoni, Sadiq Jaffer and Tom Kelly)<br><br>- #11144: = Restore frame-pointers support for amd64<br> (Fabrice Buoro, review b= y Frederic Bour and KC Sivaramakrishnan)<br><br>* #11255: in the C interfac= e, `&Field(v, i)` now has type `volatile value *`<br> instead of = `value *` in OCaml 4. This makes the memory model<br> for mixed= OCaml/C code better defined, but can cause warnings or type<br> erro= rs in user C code.<br> (KC Sivaramakrishnan, review by Xavier Leroy, = Gabriel Scherer and<br> Guillaume Munch-Maccagnoni, additional discus= sions with Stephen<br> Dolan and Luc Maranget)<br><br>- #5299, #4787,= #11138, #11272, #11506: To help debugging, `Caml_state`<br> now dyna= mically checks that the domain lock is held, and fails<br> otherwise = (with a fatal error at most entry points of the C API, or<br> systema= tically in debug mode). A new variable `Caml_state_opt` is<br> introd= uced, and is `NULL` when the domain lock is not held. This<br> allows= to test from C code if the current thread holds the lock of<br> its = domain.<br> (Guillaume Munch-Maccagnoni, review by Florian Angeletti,= Damien<br> Doligez, Sadiq Jaffer, Xavier Leroy, and Gabriel Scherer)= <br><br>- #11223: The serialization format of custom blocks changed in 4.08= ,<br> but the deserializer would still support the pre-4.08 format.&n= bsp; OCaml<br> 5.x removed support for this old format; provide a cle= ar error message<br> in this case.<br> (Hugo Heuzard, review by= Gabriel Scherer)<br><br>- #11504, #11522: Use static allocation in `caml_m= ake_float_vect` in<br> no-flat-float-array mode, it's more efficient = and avoids a a race condition<br> (Xavier Leroy, report by Guillaume = Munch-Maccagnoni, review by David Allsopp)<br><br>- #11652: Fix benign off-= by-one error in Windows implementation of caml_mem_map.<br> (David Al= lsopp, review by Gabriel Scherer)<br><br>- #11669, #11704: Fix construction= of Effect.Unhandled exceptions in the<br> bytecode interpreter.<br>&= nbsp; (David Allsopp and Xavier Leroy, report by Samuel Hym, review by Xavi= er Leroy<br> and Gabriel Scherer)<br><br>### Code generation and opti= mizations:<br><br>- #10972: ARM64 multicore support: OCaml & C stack se= paration;<br> dynamic stack size checks; fiber and effects support.<b= r> (Tom Kelly and Xavier Leroy, review by KC Sivaramakrishnan, Xavier= Leroy<br> Guillaume Munch-Maccagnoni, Eduardo Rafael, Stephen Dolan = and<br> Gabriel Scherer)<br><br>* #10845 Emit frametable size on amd6= 4 BSD (OpenBSD, FreeBSD, NetBSD) systems<br> (emitted for Linux in #8= 805)<br> (Hannes Mehnert, review by Nicol=C3=A1s Ojeda B=C3=A4r)<br><= br>### Standard library:<br><br>- #10742: Use LXM as the pseudo-random numb= er generator for module Random.<br> Add `Random.State.split` and `Ran= dom.split` to "split" a PRNG off<br> another PRNG.<br> (Xavier = Leroy, review by Gabriel Scherer and Hugo Heuzard)<br><br>* #10867, #11345:= Remove deprecated values: Array.create, Array.make_float,<br> Array.= create_matrix, Bytes.uppercase, Bytes.lowercase, Bytes.capitalize,<br> = ; Bytes.uncapitalize, Char.lowercase, Char.uppercase, Filename.temp_dir_nam= e,<br> Int32.format, Int64.format, Nativeint.format, Format.bprintf, = Format.kprintf,<br> Format.set_all_formatter_output_functions,<br>&nb= sp; Format.get_all_formatter_output_functions,<br> Format.pp_set_all_= formatter_output_functions,<br> Format.pp_get_all_formatter_output_fu= nctions, Format.pp_open_tag,<br> Format.pp_close_tag, Format.open_tag= , Format.close_tag,<br> Format.formatter_tag_functions, Format.pp_set= _formatter_tag_functions,<br> Format.pp_get_formatter_tag_functions, = Format.set_formatter_tag_functions,<br> Format.get_formatter_tag_func= tions, Gc (mutability of the fields of type<br> Gc.control), Lazy.laz= y_from_fun, Lazy.lazy_from_val, Lazy.lazy_is_val,<br> Obj.set_tag, Ob= j.truncate, Obj.final_tag, Obj.extension_constructor,<br> Obj.extensi= on_name, Obj.extension_id, Scanf.stdib, Scanf.fscanf,<br> Scanf.kfsca= nf, Stdlib.( & ), Stdlib.( or ), String.set, String.copy,<br> Str= ing.fill, String.unsafe_set, String.unsafe_fill, String.uppercase,<br> = ; String.lowercase, String.capitalize, String.uncapitalize, Thread.kill,<br= > Thread.wait_write, Thread.wait_read, the whole ThreadUnix module, t= he<br> infix operator (.[]<-).<br> (Nicol=C3=A1s Ojeda B=C3= =A4r, review by Damien Doligez)<br><br>* #10896: Remove Stream, Genlex and = Pervasives. Also remove legacy standalone<br> bigarray library (the B= igarray module is now part of the standard library).<br> (Nicol=C3=A1= s Ojeda B=C3=A4r, review by Kate Deplaix and Anil Madhavapeddy)<br><br>- #1= 0921: Use getentropy, when available, to seed the generator during<br> = ; `Random.self_init`<br> (Michael Hendricks, review by Gabriel Schere= r, Xavier Leroy, and<br> Anil Madhavapeddy)<br><br>* #10924: Add depr= ecated attribute to Printexc.catch, Printf.kprintf and<br> Unix.SO_ER= ROR.<br> (Nicol=C3=A1s Ojeda B=C3=A4r, review by Damien Doligez)<br><= br>- #10986: Add Scanf.sscanf_opt, Scanf.bscanf_opt and Scanf.scanf_opt.<br= > (Nicol=C3=A1s Ojeda B=C3=A4r, review by Florian Angeletti and Gabri= el Scherer)<br><br>* #11157: Rename "hash" in the "Hashtbl.SeededHashedType= " signature to<br> "seeded_hash". This allows defining both seeded an= d unseeded hash functions in<br> the same module.<br> (Nicol=C3= =A1s Ojeda B=C3=A4r, review by Gabriel Scherer and Xavier Leroy)<br><br>- #= 8878: Add String.hash and String.seeded_hash.<br> (Tom Kelly, review = by Alain Frisch and Nicol=C3=A1s Ojeda B=C3=A4r)<br><br>### Other libraries= :<br><br>* #9071, #9100, #10935: Reimplement `Thread.exit()` as raising the= <br> exception `Thread.Exit`, and mark `Thread.exit` as deprecated.<b= r> The new implementation changes the behavior compared with<br> = ; the OCaml 4 implementation. For example, the new implementation<br>= causes `Fun.finally` finalizers to be run and catch-all exception<br= > handlers to prevent termination.<br> (Jacques-Henri Jourdan a= nd Xavier Leroy, review by Damien Doligez,<br> Guillaume Munch-Maccag= noni, Gabriel Scherer, and Enguerrand Decorne)<br><br>- #11034: Dynlink lib= rary, add a global lock to make dynlinking<br> thread-safe.<br> = (Florian Angeletti, review by Gabriel Scherer)<br><br>- #11087: deprecate = Thread.wait_timed_read, Thread.wait_timed_write,<br> Thread.select, T= hread.wait_pid. The same functionality is available in the<br> Unix m= odule.<br> (Nicol=C3=A1s Ojeda B=C3=A4r, review by Anil Madhavapeddy)= <br><br>- #11309, #11424, #11427, #11545: Add Domain.recommended_domain_cou= nt.<br> (Christiano Haesbaert, Konstantin Belousov, review by David A= llsopp,<br> KC Sivaramakrishnan, Gabriel Scherer, Nicolas Ojeda Bar)<= br><br>- #11461, #11466: Fix gethostbyaddr for IPv6 arguments and make it d= omain-safe<br> (Olivier Nicole, Nicol=C3=A1s Ojeda B=C3=A4r, David Al= lsopp and Xavier Leroy,<br> review by the same)<br><br>- #11479= : Make Unix.symlink domain-safe on Windows<br> (Olivier Nicole, revie= w by Xavier Leroy and David Allsopp)<br><br>### Tools:<br><br>* #11004: Lit= mus tests for checking the implementation of the<br> memory model.<br= > (Luc Maranget, review by Gabriel Scherer and Xavier Leroy)<br><br>-= #11024: Handle alerts in ocamldoc.<br> The alert `[@@alert deprecate= d]` is handled specifically and it's no longer<br> needed to duplicat= e the deprecated annotation (the alert for the compiler and<br> the t= ag for the documentation). Every other alerts also appear in the<br> = documentation.<br> (Jules Aguillon, review by Florian Angeletti)<br><= br>- #11065: Port the bytecode debugger to 5.0, adding support for effect h= andlers.<br> (Damien Doligez and @fabbing, review by @fabbing and Xav= ier Leroy)<br><br>- #11079: Add the -nobanners option to dumpobj.<br> = (S=C3=A9bastien Hinderer, review by Gabriel Scherer and Vincent Laviron)<b= r><br>- #11100: Fix ocamltest to make sure failed tests are not counted as<= br> "unexpected error".<br> (Damien Doligez, review by S=C3=A9b= astien Hinderer)<br><br>- #11245: Merge the common code of ocamlcp and ocam= loptp into a single module.<br> (David Allsopp, review by S=C3=A9bast= ien Hinderer)<br><br>- #11382: OCamlmktop use a new initialization module "= OCamlmktop_init" to<br> preserve backward-compatibility with user-mod= ule provided modules that install<br> toplevel printers.<br> (F= lorian Angeletti, review by Gabriel Scherer and David Allsopp)<br><br>### M= anual and documentation:<br><br>- #11058: runtime/HACKING.adoc tips on debu= gging the runtime<br> (Gabriel Scherer, review by Enguerrand Decorne = and Nicol=C3=A1s Ojeda B=C3=A4r)<br><br>- #11093: Add an effect handlers tu= torial<br> (KC Sivaramakrishnan, review by Fran=C3=A7ois Pottier, Gab= riel Scherer, Fran=C3=A7ois<br> Bobot and Wiktor Kuchta)<br><br>- #11= 192: Better documentation for condition variables.<br> (Fran=C3=A7ois= Pottier, review by Luc Maranget, Xavier Leroy, and Wiktor Kuchta)<br><br>-= #11093: Add tutorials on parallelism features and the relaxed memory model= <br> (KC Sivaramakrishnan, review by Damien Doligez, Anil Madhavapedd= y, Gabriel<br> Scherer, Thomas Leonard, Tom Ridge, Xavier Leroy, Luc = Maranget, Fabrice<br> Buoro, Olivier Nicole, Guillaume Munch-Maccagno= ni, Jacques-Henri Jourdan)<br><br>- #11640: Add Flambda commonly-used optio= ns to the ocamlopt manpage<br> (Amandine Nangah, review by David Alls= opp, Florian Angeletti,<br> S=C3=A9bastien Hinderer, and Vincent Lavi= ron)<br><br>- #11676: Fix missing since annotation in the `Sys` and `Format= ` modules<br> (Github user Bukolab99, review by Florian Angeletti)<br= ><br>- #11813: Make new multicore chapters easier to discover, and emphasiz= e impact<br> on C bindings.<br> (Edwin T=C3=B6r=C3=B6k, review = by KC Sivaramakrishnan, and Florian Angeletti)<br><br>### Compiler user-int= erface and warnings:<br><br>- #9140, #11131: New command-line flag -nocwd t= o not include implicit<br> the current directory to the load path.<br= > (Thomas Roglin, review by Gabriel Scherer and Nicol=C3=A1s Ojeda B= =C3=A4r)<br><br>- #11089: Add 'since <version>' information to compil= er warnings.<br> (Andr=C3=A9 Maroneze, review by Florian Angeletti an= d Gabriel Scherer)<br><br>- #10909: Disable warning 59 (assignment to immut= able blocks) unless flambda<br> invariant checks are enabled.<br>&nbs= p; (Vincent Laviron, review by Gabriel Scherer)<br><br>- #10981, #11276: Im= plement a -cmi-file option for ocamlc and ocamlopt.<br> (S=C3=A9basti= en Hinderer, review by Damien Doligez, Daniel B=C3=BCnzli and<br> Flo= rian Angeletti)<br><br>* #11049: Stop padding 1-digit compiler minor versio= n numbers.<br> (So for instance OCaml 5.0 rather than 5.00)<br> = (S=C3=A9bastien Hinderer, review by David Allsopp, Florian Angeletti and<b= r> Xavier Leroy)<br><br>- #11184, #11670: Stop calling ranlib on crea= ted / installed libraries<br> (S=C3=A9bastien Hinderer and Xavier Ler= oy, review by the same)<br><br>- #11253: Deprecate `ocaml script` and `ocam= lnat` script where `script` has no<br> extension and is an implicit b= asename.<br> (David Allsopp, review by Florian Angeletti and S=C3=A9b= astien Hinderer)<br><br>### Internal/compiler-libs changes:<br><br>- #10878= , #10909: restore flambda after the Multicore merge.<br> (Vincent Lav= iron, review by Gabriel Scherer and Xavier Leroy)<br><br>- #10864, #10888: = restore afl-fuzz mode for sequential programs.<br> (Jan Midtgaard, re= view by Xavier Leroy and Gabriel Scherer)<br><br>- #11008, #11047: rework G= C statistics in the Multicore runtime<br> (Gabriel Scherer, review by= Enguerrand Decorne)<br><br>- #11058: basic debugging documentation in runt= ime/HACKING.adoc<br> (Gabriel Scherer, review by Enguerrand Decorne a= nd Nicol=C3=A1s Ojeda B=C3=A4r)<br><br>- #11199: Stop installing topdirs.cm= i twice. The toplevel now reads topdirs.cmi<br> from +compiler-libs, = as the debugger does.<br> (David Allsopp, review by S=C3=A9bastien Hi= nderer)<br><br>- #11007, #11399: META files for the stdlib, compiler-libs a= nd other libraries<br> (unix, dynlink, str, runtime_events, threads, = ocamldoc) are now installed<br> along with the compiler.<br> (D= avid Allsopp, Florian Angeletti, Nicol=C3=A1s Ojeda B=C3=A4r and S=C3=A9bas= tien Hinderer,<br> review by Daniel B=C3=BCnzli, Kate Deplaix, = Anil Madhavapeddy and Gabriel Scherer)<br><br>### Build system:<br><br>* #1= 0893: Remove configuration options --disable-force-safe-string and<br> = ; DEFAULT_STRING=3Dunsafe as well as --enable-force-safe-string and<br>&nbs= p; DEFAULT_STRING=3Dsafe which are now the default unconditionally.<br>&nbs= p; (Kate Deplaix, review by Gabriel Scherer and David Allsopp)<br><br>- #11= 092: Build native-code compilers on OpenBSD/aarch64.<br> (Christopher= Zimmermann, review by Anil Madhavapeddy)<br><br>- #11126: Build system: ma= ke it possible to choose which ocamldep<br> (and flags) to use when c= omputing dependencies for the compiler.<br> Add a -no-slash option to= ocamldep to let users override -slash.<br> (S=C3=A9bastien Hinderer,= review by David Allsopp)<br><br>- #11147: Factorize the stdlib-related com= pilation flags. Make it<br> possible to control them consistently thr= ough the STDLIBFLAGS<br> build variable. Make sure ocamldoc and ocaml= lex get compiled and<br> linked with debugging information (-g).<br>&= nbsp; (S=C3=A9bastien Hinderer, review by Gabriel Scherer)<br><br>- #11149:= Make the bootstrap process reproducible on systems with non-big-endian<br>= floating point. If the boot/ artefacts are up-to-date, this means th= at running<br> make bootstrap on any platform should not change the i= mages in boot/ and paves<br> the way for automated testing that the b= ootstrap is repeatable.<br> (David Allsopp, review by Damien Doligez = and S=C3=A9bastien Hinderer)<br><br>- #11160: otherlibs: merge win32unix in= to unix.<br> (S=C3=A9bastien Hinderer, review by David Allsopp, Nicol= =C3=A1s Ojeda B=C3=A4r,<br> Xavier Leroy, Vincent Laviron and Antonin= D=C3=A9cimo)<br><br>* #11198, #11298: Install the Dynlink, Str and Unix li= braries to individual<br> subdirectories of LIBDIR. The compiler, deb= ugger and toplevel automatically<br> add `-I +lib` if required, but d= isplay an alert.<br> (David Allsopp, review by Florian Angeletti, Nic= ol=C3=A1s Ojeda B=C3=A4r,<br> Valentin Gatien-Baron and S=C3=A9= bastien Hinderer)<br><br>- #11200: Install ocamlprof's Profiling runtime mo= dule to a +profiling,<br> removing it from the default namespace.<br>= (David Allsopp, review by S=C3=A9bastien Hinderer)<br><br>- #11294: = Switch minimum required autoconf to 2.71.<br> (David Allsopp, review = by Xavier Leroy)<br><br>- #11370, #11373: Don't pass CFLAGS to flexlink dur= ing configure.<br> (David Allsopp, report by William Hu, review by Xa= vier Leroy and<br> S=C3=A9bastien Hinderer)<br><br>- #11487: Th= wart FMA test optimization during configure<br> (William Hu, review b= y David Allsopp and S=C3=A9bastien Hinderer)<br><br>- #11097: Build native-= code compilers on NetBSD/aarch64<br> (Kate Deplaix, review by Anil Ma= dhavapeddy)<br><br>### Bug fixes:<br><br>- #10768, #11340: Fix typechecking= regression when combining first class<br> modules and GADTs.<br>&nbs= p; (Jacques Garrigue, report by Fran=C3=A7ois Thir=C3=A9, review by Matthew= Ryan)<br><br>- #10790: don't drop variance and injectivity annotations whe= n pretty printing<br> `with` constraints (for example, `with type +!'= a t =3D ...`).<br> (Florian Angeletti, report by Luke Maurer, review = by Matthew Ryan and<br> Gabriel Scherer)<br><br>- #11167: Fix m= emory leak from signal stack.<br> (Antoni =C5=BBewier=C5=BCejew, revi= ew by Gabriel Scherer and Enguerrand Decorne)<br><br>- #11112: harden -use-= runtime against spaces or quotes in the provided path<br> (Gabriel Sc= herer, report by Brahima Dibassi, review by David Allsopp)<br><br>- #11068,= #11070: Fix typo in function name given in Unix_error exception for<br>&nb= sp; Unix.readlink on Windows.<br> (David Allsopp, report by Xia Li-ya= o)<br><br>- #10807: Don't duplicate standard handles in the child process<b= r> spawned by win32unix Unix.create_process if the handles were alrea= dy<br> inheritable. Fix broken signalling of EOF on standard handles = if<br> they were already inheritable.<br> (Antonin D=C3=A9cimo,= review by Xavier Leroy and Nicol=C3=A1s Ojeda B=C3=A4r)<br><br>- #10868: F= ix off-by-1 bug when initializing frame hashtables<br> (Jonah Beckfor= d, review by Tom Kelly, Nicol=C3=A1s Ojeda B=C3=A4r and<br> KC Sivara= makrishnan)<br><br>- #11077: Make dumpobj compatible with absence of naked = pointer support<br> (Olivier Nicole and Jan Midtgaard, review by Gabr= iel Scherer)<br><br>- #11111: fix fork() usage in ocamltest C code.<br>&nbs= p; When calling fork() from C code with the Multicore runtime active,<br>&n= bsp; one needs to call caml_atfork_hook() on the forked child before it<br>= can use the OCaml runtime.<br> (Gabriel Scherer, review by Xav= ier Leroy, report by Brahima Dibassi)<br><br>- #10809: Use the WSA_FLAG_NO_= HANDLE_INHERIT on Windows when creating<br> sockets with WSASocket if= the cloexec (non-inheritable) parameter is<br> true. Fixes a race co= ndition where a child process could inherit the<br> socket and deadlo= ck the parent.<br> (Antonin D=C3=A9cimo, review by Xavier Leroy)<br><= br>- #11194, #11609: Fix inconsistent type variable names in "unbound type = var"<br> messages<br> (Ulysse G=C3=A9rard and Florian Angeletti= , review Florian Angeletti and<br> Gabriel Scherer)<br><br>- #1= 1204: Fix regression introduced in 4.14.0 that would trigger Warning 17 whe= n<br> calling virtual methods introduced by constraining the self typ= e from within<br> the class definition.<br> (Nicol=C3=A1s Ojeda= B=C3=A4r, review by Leo White)<br><br>- #11263, #11267: caml/misc.h: check= whether `_MSC_VER` is defined before using<br> it to ensure that the= headers can always be used in code which turns on<br> -Wundef (or eq= uivalent).<br> (David Allsopp and Nicol=C3=A1s Ojeda B=C3=A4r, review= by Nicol=C3=A1s Ojeda B=C3=A4r and<br> S=C3=A9bastien Hinderer= )<br><br>- #11289, #11405: fix some leaks on systhread termination<br> = ; (Fabrice Buoro, Enguerrand Decorne, Gabriel Scherer,<br> revi= ew by Xavier Leroy and Florian Angeletti, report by Romain Beauxis)<br><br>= - #11314, #11416: fix non-informative error message for module inclusion<br= > (Florian Angeletti, report by Thierry Martinez, review by Gabriel S= cherer)<br><br>- #11358, #11379: Refactor the initialization of bytecode th= reading,<br> This avoids a "dangling pointer" warning of GCC 12.1.<br= > (Xavier Leroy, report by Arma=C3=ABl Gu=C3=A9neau, review by Gabrie= l Scherer)<br><br>- #11387, module type with constraints no longer crash th= e compiler in presence<br> of both shadowing warnings and the `-bin-a= nnot` compiler flag.<br> (Florian Angeletti, report by Christophe Raf= falli, review by Gabriel Scherer)<br><br>- #11392, #11392: assertion failur= e with -rectypes and external definitions<br> (Gabriel Scherer, revie= w by Florian Angeletti, report by Dmitrii Kosarev)<br><br>- #11417: Fix reg= ression allowing virtual methods in non-virtual classes.<br> (Leo Whi= te, review by Florian Angeletti)<br><br>- #11468: Fix regression from #1018= 6 (OCaml 4.13) detecting IPv6 on Windows for<br> mingw-w64 i686 port.= <br> (David Allsopp, review by Xavier Leroy and S=C3=A9bastien Hinder= er)<br><br>- #11482, #11542: Fix random crash in large closure allocation<b= r> (Damien Doligez, report by Thierry Martinez and Vincent Laviron, r= eview by<br> Xavier Leroy)<br><br>- #11508, #11509: make Bytes.= escaped domain-safe<br> (Christiano Haesbaert and Gabriel Scherer,<br= > review by Xavier Leroy,<br> report by Jan Midtgaa= rd and Tom Kelly)<br><br>- #11516, #11524: Fix the `deprecated_mutable` att= ribute.<br> (Chris Casinghino, review by Nicol=C3=A1s Ojeda B=C3=A4r = and Florian Angeletti)<br><br>- #11576: Fix bug in Bigarray.Genarray.init i= n the the case of zero-dimensional<br> arrays.<br> (Nicol=C3=A1= s Ojeda B=C3=A4r, Jeremy Yallop, report by Masayuki Takeda, review by Jerem= y<br> Yallop and Florian Angeletti)<br><br>- #11587: Prevent integer = comparison from being used on pointers<br> (Vincent Laviron, review b= y Gabriel Scherer)<br><br>- #11622: Prevent stack overflow when printing a = constructor or record<br> mismatch error involving recursive types.<b= r> (Florian Angeletti, review by Gabriel Scherer)<br><br>- #11662, #1= 1673: fix a memory leak when using Dynlink,<br> the bug was only pres= ent in development version of OCaml 5.<br> (Stephen Dolan, report by = Andre Maroneze, review by Gabriel Scherer)<br><br>- #11732: Ensure that typ= es from packed modules are always generalised<br> (Stephen Dolan and = Leo White, review by Jacques Garrigue)<br><br>- #11737: Fix segfault condit= ion in Unix.stat under Windows in the presence of<br> multiple thread= s.<br> (Marc Lasson, Nicol=C3=A1s Ojeda B=C3=A4r, review by Gabriel S= cherer and David Allsopp)<br><br>- #11776: Extend environment with functor = parameters in `strengthen_lazy`.<br> (Chris Casinghino and Luke Maure= r, review by Gabriel Scherer)<br><br>- #11533, #11534: follow synonyms agai= n in #show_module_type<br> (this had stopped working in 4.14.0)<br>&n= bsp; (Gabriel Scherer, review by Jacques Garrigue, report by Yaron Minsky)<= br></div></div></div></body></html> --=_7222fbed-f645-435c-a7e6-2d84487f8df4--