I am pleased to announce the 111.25.00 release of the Core suite.
With this release all packages are now compatible with OCaml 4.02.
The following packages were upgraded:
- async_extra
- async_kernel
- async
- async_parallel
- async_unix
- core_extended
- core_kernel
- core
- custom_printf
- jenga
- ocaml_plugin
- patdiff
- patience_diff
- sexplib
- textutils
Files and documentation for this release are available on our
website and all packages are in opam:
Here is list of changes for this version:
## 111.25.00
### async
- add a dns example
### async_extra
- Removed `lazy` from the core of `Log`.
- Made `Log.Message.t` have a stable `bin_io`.
The `Stable.V1` is the current serialization scheme, and `Stable.V0`
is the serialization scheme in 111.18.00 and before, which is needed
to talk to older systems.
- Changed `Rpc` to return `Connection_closed` if a connection ends
before a response makes it to the caller.
Previously, the dispatch output was never determined.
Also, removed an unused field in one of the internal data structures
of Async RPC.
- In `Versioned_rpc`, added `version:int` argument to `implement_multi` functions.
- In `Versioned_rpc`, the `Pipe_rpc.Make` functors now return an
additional output functor.
`Register'` is like `Register` but has in its input module:
```ocaml
val response_of_model :
Model.response Queue.t -> response Queue.t Deferred.t
```
rather than
```ocaml
val response_of_model : Model.response -> response
```
This is analogous to `Pipe.map'` and `Pipe.map`.
- Added to `Log` a `V2` stable format and better readers for
time-varying formats.
- In `Log`, added an optional `?time:Time.t` argument to allow callers
to pass in the logged time of an event rather than relying on
`Time.now ()`.
### async_kernel
- Fixed `Clock.run_at_intervals` to make the initial callback at an
interval multiple.
Previously, if `start` was in the past, `f` would run immediately
rather than waiting for an interval of the form `start + i * span`.
Now it always waits for an interval, even the first time it runs.
### async_parallel
- improve error handling
### async_unix
- Added `Unix.Addr_info` and `Name_info`, which wrap `getaddrinfo` and
`getnameinfo`.
- Improved the scheduler's error message when the thread pool is
stuck.
### core
- Added `Gc.disable_compaction` function.
- Added `Time.to_string_abs_trimmed`, which prints a trimmed time and
takes a `zone` argument.
- Fixed `unix_stubs.c` to suppress a warning when building with some
versions of gcc.
- Changed `Time.Zone` to allow the zoneinfo location to be specified
by an environment variable.
Closes #40
- Fix compatibility with 4.02
### core_extended
- Moved `Quickcheck` from `core`.
- Added [Int.gcd].
### core_kernel
- Fix build on FreeBSD
Closes #10
- Added functions to `Container` interface: `sum`, `min_elt`,
`max_elt`.
```ocaml
(** Returns the sum of [f i] for i in the container *)
val sum
: (module Commutative_group.S with type t = 'sum)
-> t -> f:(elt -> 'sum) -> 'sum
(** Returns a min (resp max) element from the collection using the provided [cmp]
function. In case of a tie, the first element encountered while traversing the
collection is returned. The implementation uses [fold] so it has the same
complexity as [fold]. Returns [None] iff the collection is empty. *)
val min_elt : t -> cmp:(elt -> elt -> int) -> elt option
val max_elt : t -> cmp:(elt -> elt -> int) -> elt option
```
- Made `Core_hashtbl_intf` more flexible. For instance supports
modules that require typereps to be passed when creating a table.
Address the following issues:
The type `('a, 'b, 'z) create_options` needs to be consistently used
so that `b` corresponds with the type of data values in the returned
hash table. The type argument was wrong in several cases.
Added the type `('a, 'z) map_options` to `Accessors` so that
map-like functions -- those that output hash tables of a different
type than they input -- can allow additional arguments.
- Fixed a bug in `Dequeue`'s `bin_prot` implementation that caused it
to raise when deserializing an empty dequeue.
- Made `Container.Make`'s interface match `Monad.Make`.
- Deprecated infix `or` in favor of `||`.
- Simplified the interface of `Arg` (which was already deprecated in
favor of `Command`).
- Replaced `Bag.fold_elt` with `Bag.filter`.
- `Memo.general` now raises on non-positive `cache_size_bound`.
- Removed `Option.apply`.
- Removed `Result.call`, `Result.apply`.
- Moved `Quichcheck` to `core_extended`.
It should not be used in new code.
### custom_printf
- Fix 4.02 compatibility.
### jenga
- Switched to un-version-numbered API.
- Renamed `Tenacious_sample_lib.Tenacious` to
`Tenacious_sample_lib.Tenacious_sample` to avoid conflicts in the
public release.
- Write `buildable_targets.list` (on alias `.info`).
### ocaml_plugin
- ignore more warnings by default
### patdiff
- add a `?file_names` argument to `Compare_core.diff_strings`
### patience_diff
- refactoring and more unit tests
### sexplib
- Fix compatibility with OCaml 4.02
--
Jeremie Dimino, for the Core team