Dear OCaml developers, We are happy to announce the v0.12 release of Jane Street packages! This release comes with a lot of changes, as we ship 19 new packages, and have enhanced and refactored a number of existing ones. The documentation for this release is available on our website: https://ocaml.janestreet.com/ocaml-core/v0.12/doc/ The remainder of this mail highlights the main changes since the v0.11 release; we hope it will be useful to developers in the process of migrating to the new version. A comprehensive change log is available on discuss (it turned out to be too big for this list): https://discuss.ocaml.org/t/ann-v0-12-release-of-jane-street-packages/3499 # Comparison and Equality - The `~cmp` argument used to pass a comparison function has been renamed to `~compare`. - The `~equal` label of functions `List.equal` and `Array.equal` has been removed. # New packages - base_bigstring (https://github.com/janestreet/base_bigstring): String type based on Bigarray, for use in I/O and C-bindings. - base_quickcheck (https://github.com/janestreet/base_quickcheck): Randomized testing framework, designed for compatibility with Base. - hardcaml (https://github.com/janestreet/hardcaml): Hardcaml is an OCaml library for designing hardware. - hardcaml_waveterm (https://github.com/janestreet/hardcaml_waveterm): A terminal based digital waveform viewer for Hardcaml. - incr_dom_keyboard (https://github.com/janestreet/incr_dom_keyboard): A terminal based digital waveform viewer for Hardcaml. - incr_dom_partial_render ( https://github.com/janestreet/incr_dom_partial_render): A library for simplifying rendering of large amounts of data. - jst-config (https://github.com/janestreet/jst-config): Compile-time configuration for Jane Street libraries. - netsnmp (https://github.com/janestreet/netsnmp): An interface to the Net-SNMP client library. - notty_async (https://github.com/janestreet/notty_async): An interface to the Net-SNMP client library. - pam (https://github.com/janestreet/pam): OCaml bindings for the Linux-PAM library. - ppx_deriving_hardcaml (https://github.com/janestreet/ppx_deriving_hardcaml ): A plugin for the ppx_deriving rewriter that supports the Hardcaml syntax. - ppx_module_timer (https://github.com/janestreet/ppx_module_timer): Ppx rewriter that records top-level module startup times. - ppx_stable (https://github.com/janestreet/ppx_stable): Stable types conversions generator. - sexp (https://github.com/janestreet/sexp): S-expression swiss knife. - sexp_diff_kernel (https://github.com/janestreet/sexp_diff_kernel): Code for computing the diff of two sexps. - sexp_macro (https://github.com/janestreet/sexp_macro): Sexp macros. - shell (https://github.com/janestreet/shell): Yet another implementation of fork&exec and related functionality. - time_now (https://github.com/janestreet/time_now): Reports the current time. - zstandard (https://github.com/janestreet/zstandard): OCaml bindings to Zstandard. # Deprecations `Async`: - Deprecated `Scheduler.add_busy_poller`. `Base`: - Deprecated `Applicative`'s `Args*` module types and `Make_args*` functors, which have been superseded by the `let%map` syntax. - Deprecated `Array.replace`. `Core_kernel`: - Deprecated `Obj_array`, replacing uses with `Uniform_array`. - Deprecated the `Timing_wheel_ns.Priority_queue` module, with no intended replacement. No longer released: - `async_extended`. - `async_parallel`. - `configurator`. - `findlib_top`. - `incremental_kernel`. - `jane-street-tests`. - `jenga`. - `ppx_ast`. - `ppx_core`. - `ppx_driver`. - `ppx_metaquot`. - `ppx_traverse`. - `ppx_traverse_builtins`. - `ppx_type_conv`. # Moves `Async`: - Moved `Weak_hashtbl` module out of `Async` to its own library. - Moved `Lock_file` to a single-module library, `Lock_file_async`. - Moved `Async_extra.Udp` to a standalone library, `Async_udp`. `Async_extended`: - Moved modules out of `Async_extended` into their own libraries, aimed at deleting `Async_extended`. `Async_kernel`: - Moved the `Limiter` module to a single-module library, `Limiter_async`. - Moved `Eager_deferred` to a standalone library. `Async_unix`: - Moved modules to standalone libraries: `Thread_pool`, `Thread_safe_ivar`, `Thread_safe_pipe`. `Base`: - Moved the `Heap_block` module to `Core_kernel`. - Added top-level module `Base.Sign_or_nan`, moved out of `Float` - Added `Stack` module, moved in from `Core_kernel`. - Added `Base.Bigstring` module, moving in most of `Core_kernel.Bigstring`. - Added the `Base_bigstring` library, splitting out the `Bigstring` module from `Base`. `Core`: - Moved some modules out of `Core` to their own library: `Crc`, `Piecewise_linear`, `Syslog`, `Timing_wheel_float`, `Weak_hashtbl`. - Moved modules `Schedule_v4_deprecated` and `Schedule_v5` out of `Core` and to their own libraries. - Moved the `Daemon` module, to a single-module library. - Moved the `Uuid` module out of `Core`, to a single-module library. - Moved `Lock_file` to a single-module library, `Lock_file_blocking`. - Moved the `Mac_address` module out of `Core`, to a single-module library. - Moved modules out to standalone libraries: `Nano_mutex`, `Squeue`. `Core_kernel`: - Added `Time_ns.Ofday` submodule, moved from `Core`. - Moved module `Unpack_buffer` out of `Core_kernel` and into its own library. - Moved the implementation of `Quickcheck` into its own library, `Base_quickcheck`. - Moved the `Limiter` module to a single-module library. - Moved the `Bucket` module out to a single-module library. - Split out a `Config_h` library for generating the `config.h` file that many libraries (including `Core_kernel`) use. - Moved the `Weak_pointer` module to a standalone library. - Moved modules out to standalone libraries: `Force_once`, `Hash_heap`, `Int_set`, `Rope`, `Thread_safe_queue`, `Total_map`, `Weak_array`. `Incremental`: - Made `Incremental` be the library name rather than `Incremental_lib`, and moved all modules from `Incremental_lib` to submodules of `Incremental`. - Merged the `Incremental` and `Incremental_kernel` libraries into a single library, `Incremental`. - Moved the `Balanced_reducer` module out of `Incremental`, to a single-module library. `Sexplib`: - Moved `Sexplib.Macro` to its own library `Sexp_macro`. `ppx`: - `ppx_ast`, `ppx_core`, `ppx_driver`, `ppx_metaquot`, `ppx_traverse`, `ppx_traverse_builtins`, and `ppx_type_conv` have been merged into ppxlib (https://github.com/ocaml-ppx/ppxlib).