Core 109.40.00

# 109.39.00

## async_unix

- Added "thread-local" storage, `Scheduler.{find,with}_local`, for
 `LWT` emulation.

  ```ocaml
  (** [with_local key value ~f] runs [f] right now with the binding [key ` value].  All
      calls to [find_local key] in [f] and computations started from [f] will return
      [value]. *)
  val with_local : 'a Univ_map.Key.t -> 'a option -> f:(unit -> 'b) -> 'b

  (** [find_local key] returns the value associated to [key] in the current execution
      context. *)
  val find_local : 'a Univ_map.Key.t -> 'a option
  ```

## core_bench

- Added support for additional predictors like minor/major GCs and
  compactions, using multi-variable linear regression.

  Replaced linear regression with multi-variable linear regression.
  The original algorithm estimated the cost of a function `f` by using
  a linear regression of the time taken to run `f` vs the number of
  runs.  The new version adds the ability to include additional
  predictors such as minor GCs, compactions etc.

  This allows a more fine-grained split-up of the running costs of a
  function, distinguishing between the time spent actually running `f`
  and the time spent doing minor GCs, major GCs or compactions.
- Added a forking option that allows benchmarks to be run in separate
  processes.

  This avoids any influence (e.g. polluting the cache, size of live
  heap words) they might otherwise have on each other.

## core_kernel

- Implemented `Heap.iter` directly instead of in terms of `fold`.

# 109.40.00

## async_extra

- Added to `Udp.Config` the ability to stop early, via `stop : unit Deferred.t`.

## async_unix

- Added value `Socket.Type.unix_dgram`, which represents a UNIX domain
  datagram socket.
- Added UDP socket functionality: `Socket.Opt.mcast_{loop,ttl}` and
  `Socket.mcast_{join,leave}`.
- Improved `Fd.ready_fold` to accept `?stop:(unit Deferred.t)` rather
  than `?stop:('a -> bool)`.

## core_extended

- Added `Stats_reporting.Delta`, for recording deltas of values.