I'm happy to announce the 111.21.00 release of the Core suite.
The following packages were upgraded:
- async_extended
- async_extra
- async_ssl
- async_unix
- core
- core_kernel
- custom_printf
- jenga
- ocaml_plugin
- patdiff
- patience_diff
Files and documentation for this release are available on our website and all packages are in opam:
Here is the list of changes for this version:
## async_extra
- Added `Sexp_hum` `Log.Output.format`, which is useful for making logs
more human readable.
- Added `with compare` to `Rpc.Implementation.Description`.
## async_ssl
- Upgraded to use new ctypes and its new stub generation methods.
## async_unix
- Added `Process.wait_stdout` and `wait_stdout_lines`, which are like
`run` and `run_lines`, but take a `Process.t`.
## core
- Fixed an issue where `Time.Zone.init` would not properly traverse the
directory containing timezone information.
- Added `Time.With_utc_sexp`, which has stable serialization of `Time.t`
that is byte-for-byte equal across timezones.
- Made `Uuid` stable.
- Made `Piecewise_linear` stable.
## core_kernel
- Removed our custom C stub for closing channels, reverting to the one
in the OCaml runtime.
A long time ago we found that the OCaml runtime did not release the
lock before calling `close` on the fd underlying a channel. On some
filesystems (e.g. smb, nfs) this could cause a runtime hang. We
filed a bug with INRIA and wrote our own `close` function which
`In_channel` calls to this day. The bug has long been fixed, and
our function is probably buggy, so this reverts us to the runtime's
`close`.
- Added `Float.{of,to}_int64_preserve_order`, which implement the
order-preserving zero-preserving bijection between non-NaN floats and
99.95% of `Int64`'s.
Used the new function to improve `one_ulp`, which is now exposed:
(** The next or previous representable float. ULP stands for "unit of least precision",
and is the spacing between floating point numbers. Both [one_ulp `Up infinity] and
[one_ulp `Down neg_infinity] return a nan. *)
val one_ulp : [`Up | `Down] -> t -> t
- Changed `Map.symmetric_diff` to return a `Sequence.t`
instead of a `list`.
- Added `Sequence.filter_map`.
- Improved `Stable_unit_test.Make_sexp_deserialization_test`'s error
message so that it includes the expected sexp.
## custom_printf
- Fixed a bug in which custom-printf syntax was incompatible with
labeled arguments.
For example, the preprocessor used to raise an exception on this code:
let f ~labeled_arg:() fmt = ksprintf (fun _ -> ()) fmt in
f !"hello" ~labeled_arg:()
## jenga
- Introduced jenga API v3, a small cleanup of v2 which has been planned
for a while.
## ocaml_plugin
- Fixed a bug in `ocaml_embed_compiler` on 32-bit machines.
`ocaml_embed_compiler` tries to read the full contents of the file as
a string, but the string might be too big on 32bits:
https://github.com/ocaml/opam-repository/pull/2062#issuecomment-43045491## patdiff
- Added `Patdiff_core.iter_ansi`.
(** Iter along the lines of the diff and the breaks between hunks. Offers more flexibility
regarding what the caller wants to do with the lines *)
val iter_ansi
: f_hunk_break:((int*int) -> (int*int) -> unit)
-> f_line:(string -> unit)
-> string Patience_diff.Hunk.t list
-> unit
## patience_diff
- Added plain differ `Plain_diff` and use it in some cases for
improved results.
- Move modules under `Patience_diff_lib.Std`.