- enumerate, a syntax extension for enumerating finite types.
Files and documentation for this release are available on our website and all packages are in opam:
## async_extra
- Add `?max_connections:int` argument to `Rpc.Connection.serve`.
`max_connections` is passed to `Tcp.Server.create`, and limits the
number of connections that an Rpc server will accept.
- Improved `Log.Rotation`:
- Made `Log.Rotation.t` abstract; use `create` rather than an
explicit record.
- Added a `` `Dated`` `naming_scheme`.
- Add `Log.Rotation.default`, for getting a sensible default
rotation scheme.
- Added an optional (but discouraged) option to symlink the latest
log file.
- Every log rotation scheme has an associated `Time.Zone.t`.
- Changed the internal representation of `Log.Rotation.t`, but
`t_of_sexp` is backwards compatible, so existing config files will
continue to work.
- Changed `Udp.bind_any` to use `Socket.bind ~reuseaddr:false`, to
ensure a unique port.
- Added `Tcp.Server.listening_socket`, which returns the socket the
server is listening on.
Changed `Tcp.Server` so that if the listening socket is closed, the
server is closed.
- Added to `Udp.Config.t` a `max_ready : int` field to prevent UDP
receive loops from starving other async jobs.
- Improved `File_tail` to cut the number of `fstat` calls in half.
`File_tail` uses a stat loop to monitor a file and continue reading
it as it grows. We had made two `fstat` invocations per loop
iteration, using `Async.Std.Unix.with_file` which constructs an
`Fd.t` and therefore does it own `fstat`. Switching to
`Core.Std.Unix.with_file` with `In_thread.run` eliminated the extra
`fstat`.
## async_unix
- Improved `Socket.accept` to abort and return `` `Socket_closed`` when
the file descriptor underlying the socket is closed.
- Added to `Socket.bind` a `?reuseaddr:bool` argument, preserving the
default as `true`.
- Added `Fd.close_started`, which becomes determined when `close` is
called on an `Fd.t`.
## bin_prot
- Fixed build on ARM.
## core
- Added `Unix.Syslog` module.
- Changed `Command.run` to no longer ignore the first element of its
`~argv` parameter.
- Made `Time.Span.to_short_string` show microsecond precision.
## core_extended
- Added `Set_lang`, a DSL for sets with constants, union, intersection,
and difference.
- In `Process`, use `epoll` rather than `select` when possible,
This prevents errors when selecting on file descriptors numbered
greater than `FD_SETSIZE` (1024).
- Removed `Syslog` module. There is now `Unix.Syslog` in core instead;
the APIs are not compatible, but they are similar.
## core_kernel
- Added `Error.to_string_hum_deprecated` that is the same as
`Error.to_string_hum` pre 109.61.
- Changed `Error.to_string_hum` so that
`Error.to_string_hum (Error.of_string s) = s`.
This fixed undesirable sexp escaping introduced in 109.61 and
restores the pre-109.61 behavior for the special case of
`Error.of_string`. A consequence of the removal of the custom
`to_string_hum` converter in 109.61 was that:
Error.to_string_hum (Error.of_string s) = Sexp.to_string_hum (Sexp.Atom s)
That introduced sexp escaping of `s`.
- Added to `Doubly_linked` functions for moving an element
within a list.
val move_to_front : 'a t -> 'a Elt.t -> unit
val move_to_back : 'a t -> 'a Elt.t -> unit
val move_after : 'a t -> 'a Elt.t -> anchor:'a Elt.t -> unit
val move_before : 'a t -> 'a Elt.t -> anchor:'a Elt.t -> unit
- Improved `Core_map_unit_tests.Unit_tests` to allow arbitrary data
in the map, not just `ints`.
This was done by eta expansion.
## custom_printf
- Simplified the code generated by `pa_custom_printf` to make it
more readable.
## re2
- Fixed a bug with `replace_exn` and anchoring.
Fixed this bug:
$ R.replace_exn ~f:(fun _ -> "a") (R.create_exn "^") "XYZ";;
- : string = "aXaYaZa"
$ R.replace_exn ~f:(fun _ -> "a") (R.create_exn "^X") "XXXYXXZ";;
- : string = "aaaYXXZ"
## textutils
- Changed `Textutils.Console` to not reference `Async.Log`, so that
building inline benchmark runners no longer requires building `Async`.
The change makes `Textutils`, and by extension `Core_extended` and
`Core_bench`, not depend on `Async`.
---
We hope you enjoy it!
-- Ben Millwood, for the Core team