OCamlPro/opam-repository — pull request #1155 by diml (2013-10-02 09:57:51+00:00)
Title: core 109.45.00-rc1

# 109.44.00

## async_core

- Documented that `Throttle.enqueue t f` never runs `f` immediately,
and added unit tests.

## async_extra

- Fixed a time-based race condition in `Log` rotation.

## bin_prot

- Remove "unwrapped" pointers used by `Bin_prot`, with the bug from
109.41 fixed.

Unwrapped pointers cannot coexist with the remove-page-table
optimization.

Removed all the C stubs for reading/writing and used instead either
the new primitives of the next OCaml or standard OCaml code
reading/writing integers byte by byte.

Since we don't have unsafe/safe functions anymore but only safe
ones, removed all the `bin_{read,write}_t_` functions.

Also renamed `bin_read_t__` to `__bin_read_t__` for the same reason
as sexplib: to avoid confusion with the function generated for `t_`
and hide it in the toplevel.

## core

- Added `val Day_of_week.num_days : from:t -> to_:t -> int`.
- Added `Time.of_date_ofday_precise` and `Time.Zone.next_clock_shift`,
to deal with clocks going forward and backward.

Due to clocks going forward/backward, some local times occur twice,
and some never occur at all. `Time.of_date_ofday_precise`
identifies these cases and returns all of the relevant information.

- Added accessors for `Unix.Cidr`: `base_address` and `bits`.

```ocaml
(** Accessors.
- [base_address 192.168.0.0/24 ` 192.168.0.0]
- [bits 192.168.0.0/24 ` 24]. *)
val base_address : t -> Inet_addr.t
val bits : t -> int
```

## core_kernel

- Implemented `Dequeue.iter` directly, instead of as a specialization
of `fold`.

Extended random tests to cover `iter`.

# 109.45.00

## async_core

- Removed internal `Backpatched` module.

Async used to use this module, but it doesn't anymore.

## async_extra

- Added `?abort:unit Deferred.t` argument to
`Lock_file.waiting_create`, `Lock_file.Nfs.waiting_create` and
`critical_section`.

## async_unix

- Added `Fd.every_ready_to` `Fd.interruptible_every_ready_to` which
register a callback to be called every time the fd becomes ready.

These can significantly reduce allocation.
- Renamed `Fd.ready_to_interruptible` as `Fd.interruptible_ready_to`.
- Changed `Fd.ready_fold` to use `Fd.interruptible_ready_to`, to
improve its performance.

## core

- Added `Core.Std.phys_same`, which is like `phys_equal`, except has a
more general type.

```ocaml
val phys_equal : 'a -> 'a -> bool
val phys_same : _ -> _ -> bool
```

`phys_same` is useful when dealing with existential types, and one
has a packed value and an unpacked value that one wants to check are
physically equal. One can't use `phys_equal` in such a situation
because the types are different.
- Added `Iobuf.set_bounds_and_buffer` and `set_bounds_and_buffer_sub`,
which make it easier to use with zero allocation.

```ocaml
(** [set_bounds_and_buffer ~src ~dst] copies bounds (ie limits + window) and shallowly
copies the buffer from [src] to [dst]. [read_write] access is required on [src]
because the caller might have [read_write] access to [dst], and would after the call
then effectively have [read_write] access to [src]. *)
val set_bounds_and_buffer : src:(read_write, _) t -> dst:(_, seek) t -> unit

(** [set_bounds_and_buffer_sub ?pos ?len ~src ~dst ()] is a more efficient version of:
[set_bounds_and_buffer ~src:(Iobuf.sub ?pos ?len src) ~dst].

[set_bounds_and_buffer ~src ~dst] is not the same as
[set_bounds_and_buffer_sub ~dst ~src ()], because the limits are narrowed in the
latter case. *)
val set_bounds_and_buffer_sub
: ?pos:int
-> ?len:int
-> src:(read_write, _) t
-> dst:(_, seek) t
-> unit -> unit
```
- Added `?timeout:Time.Span.t` argument to
`Lock_file.blocking_create`, `Lock_file.Nfs.blocking_create` and
`critical_section`.

## core_extended

- Fixed `Core_extended.Sys.groups` to use `Unix.Group.getbygid` rather
than `Unix.Group.getbygid_exn`.

This handles when a group is deleted and its gid remains in the
cache, which causes `Unix.Group.getbygid_exn` to fail because the
gid no longer resolves to a group.

## core_kernel

- Changed `Blang.bind` to short-circuit `And`, `Or`, and `If`
expressions.

For example if `bind t1 f ` false`, then `bind (and_ t1 t2) `
false`, and will not evaluate `bind t2 f`.

- Renamed `Dequeue.get` as `get_opt`, and `get_exn` as `get`, to be
consistent with other containers which don't use the `_exn` suffix
for subscripting exceptions.
- Removed `Source_code_position.to_sexp_hum`, in favor of
`sexp_of_t_hum`, which works smoothly with `with sexp`.
- Changed `Flat_queue_unit_tests` to run `Flat_queue.invariant`, which
was mistakenly not being used.

## ocaml_plugin

- Made executables link without error even if no archive is embedded
in them.

This is often the desired behavior (for inline tests of libraries
using transitively ocaml-plugin for instance).