I am pleased to announce the (somewhat delayed) 111.17.00 release of the Core suite.
The following packages were upgraded:
- async
- async_extra
- async_inotify
- async_kernel
- async_parallel
- async_unix
- bignum
- core
- core_extended
- core_kernel
- faillib
- jenga
- ocaml_plugin
- patdiff
- patience_diff
- sexplib
- typerep
We're also releasing for the first time a new library called async_extended, which contains more experimental and less well-scrutinised code than async, in much the same role that core_extended plays for core.
Note that async_extra, despite the name, does not play that role: the code in async_extra is subject to the same level of scrutiny as async or async_kernel. We've had discussions internally about merging async and async_extra into a single library, since they serve essentially the same purpose, but it's no-one's top priority.
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 module `Persistent_rpc_client`, an RPC client that attempts to
reconnect when the connection is lost, until a new connection is
established.
- Significantly sped up the `Rpc` module by removing `Bigstring`
serialization.
Performance of the two implementations was tested by building a
simple client/server executable that would count major cycles.
Sending 100 byte messages at a rate of 50k/second shows (on both
sides of the RPC):
original:
* ~160 major cycles in 30s
* CPU usage around 60%
new:
* ~10 major cycles in 30s
* CPU usage <= 2%
- Enabled a version of `Pipe_rpc` and `State_rpc` where the consumer
can pushback on the producer if it can't consume the contents of the
pipe fast enough.
- Added `Log.Level.arg : Log.Level.t Command.Spec.Arg_type.t` for
defining command lines that accept (and autocomplete) log levels.
- Added `Command.async_or_error` and renamed `Command.async_basic` to
`Command.async`, leaving `async_basic` a deprecated alias for the
new name.
`Command.async_or_error` is similar to `Command.basic` and
`Command.async`, but accepts a `unit Or_error.t Deferred.t` type.
- Added `Persistent_rpc_connection.current_connection`, so that one
can detect whether one is currently connected.
```ocaml
val current_connection : t -> Rpc.Connection.t option
```