Delete modules Lwt_log, Lwt_daemon, Lwt_log_core, and package lwt.log. These
are in package lwt_log since Lwt 3.2.0, but it is recommended to use
Logs_lwt from the logs library instead (#484, initiated Hannes Mehnert).

Delete package lwt.preemptive. It is an alias for lwt.unix since Lwt 3.2.0
(#487).

Planned to break in 4.0.0

See #453 for details and instructions about planned breakage in Lwt 4.0.0.

The semantics of Lwt will be adjusted for better exception and stack safety
(#500).

The PPX will be factored out into its own opam package, lwt_ppx. This
package is installable from opam now, as of Lwt 3.2.0 (#338).

Similarly, the deprecated Camlp4 syntax will be factored out into
lwt_camlp4, which is installable from opam now (#370).

Modules Lwt_log, Lwt_log_core, Lwt_log_rules, and Lwt_daemon are being
deprecated and factored out into opam package lwt_log, also installable from
opam now. Use the logs library for logging, in particular module Logs_lwt.
Direct daemonization is deprecated on most platforms (#484, Hannes Mehnert).

The >> construct from the PPX will be deleted (#471, Raphaël Proust).

Package lwt.preemptive is being merged into lwt.unix. In 3.2.0,
lwt.preemptive becomes an alias for lwt.unix, and the package name
lwt.preemptive will be deleted in 4.0.0 (#487).

Deprecations

Lwt.waiter_of_wakener should not be used, as it can lead to soundness bugs
in future (but not current) Lwt (#458).

Lwt_sequence was deprecated in Lwt 2.6.0, but it now has a warning attached,
as do Lwt.add_task_r and Lwt.add_task_l, which use it (#361).

Use of the following functions is discouraged, but they have not yet
received deprecation warnings: Lwt.with_value, Lwt.cancel, Lwt.state,
Lwt.ignore_result (#359, #469).

Miscellaneous

Replace references to Camlp4 in the manual with the PPX (#457, Bobby
Priambodo).

The additional packages lwt_ssl, lwt_react, lwt_glib get new minor
releases, the change being new Jbuilder build systems (#374, Andrew
Ray).

3.0.0 (2017-04-10)

Breaking

These changes were originally announced in release 2.7.0 (#308).

Lwt_engine.libev now has an optional argument for selecting the libev back
end (#269, #294, Jeremy Yallop).

Lwt_io.establish_server has been changed to make it more difficult to leak
file descriptors (#258, #260).

Lwt_io.shutdown_server now evaluates to a promise, which completes when the
listening socket's close(2) operation completes (#259).

Lwt_unix.bind now evaluates to a promise, because the bind(2) system call
can block for Unix domain sockets (#296, requested David Sheets).

ocamlfind packages lwt.react, lwt.ssl, lwt.glib are replaced by lwt_react,
lwt_ssl, lwt_glib. These have been separate OPAM packages, under those
names, since 2.7.0 (#301).

2.7.1 (2017-04-08)

Fixes

OCaml 4.05 compatibility (Mauricio Fernandez, #322).

Give Lwt_unix.file_exists the same semantics as Sys.file_exists, with
respect to not raising Unix.Unix_error (Mauricio Fernandez, #316).

Improve diagnostics from build scripts (Tim Cuthbertson, #313, #314).

Additions

Announce Lwt_result, which was originally released as an experimental module
in release 2.6.0 (Simon Cruanes, #320, #247).

2.7.0 (2017-01-03)

General

Values of types a Lwt.t are now referred to as promises rather than threads
(#300). The manual has not yet been updated.

Breaking

After this release, Lwt will switch to semantic versioning. Future breaking
changes will first require deprecation, then a major version number increase
(#293).

Lwt no longer supports OCaml 4.01 (#272).

Lwt_unix.fdatasync is no longer available on macOS. It was calling an
undocumented system call on that system (#285, Jeremy Yallop).

Planned to break in 3.0.0

APIs in this category have deprecation messages attached. The messages will
be displayed if you recompile your code, and can also be seen in #308.

Lwt_engine.libev will have an argument for selecting the libev back end
(#269, #294, Jeremy Yallop).

Lwt_io.establish_server will be replaced by a version that makes it
difficult to leak file descriptors (#258, #260).

Lwt_io.shutdown_server will evaluate to a promise, which indicates when the
close operation completes (#259).

Lwt_unix.bind will evaluate to a promise, since bind can block for Unix
domain sockets (#296, requested David Sheets).

ocamlfind packages lwt.react, lwt.ssl, and lwt.glib will be replaced by the
new lwt_react, lwt_ssl, and lwt_glib. These are now distributed in new OPAM
packages with the same names, separately from OPAM package lwt (#301).

2.4.3 (2012-12-27)

fix Lwt_ssl.{in,out}_channel_of_descr: shutdown and close the
socket when the channel is closed

2.4.2 (2012-09-28)

fix the stub for Lwt_unix.readdir

change the default method for Lwt_glib.install
(use the glib main loop by default: more portable)

ignore invalid file descriptors returned by glib
(like the emulation of select in glib does)

use environment variables in discover.ml
- use LIBRARY_PATH and C_INCLUDE_PATH for searching headers
- allow to pass flags for a library in <LIB>_CLFAGS and <LIB>_LIBS

add Lwt_unix.on_signal_full

2.4.1 (2012-08-22)

Add Lwt_stream.on_terminate

Fix Lwt_gc

Fix stubs for get_credentials on *BSD

2.4.0 (2012-07-16)

Reimplement Lwt_stream
- much simpler and more efficient
- do not use Weak
- add bounded push streams

Add Lwt.async

Add Lwt_preemptive.run_in_main

Implement Lwt_unix.get_credentials on MacOS X/OpenBSD

Ensure that on_cancel functions are executed first

Better implementation of Lwt.cancel with more tests

Simplify the API for unix jobs

Better handling of the master lock in libev stubs

Windows fixes/updates:
- pass -lws2_32 instead of ws2_32.lib if building with mingw
- fix a bug causing Lwt_unix.read/write to block when a socket
is not readable/writable
- port Lwt_process and Lwt_unix.system to Windows