4.0.0 is a major release that breaks quite a few interfaces, such as:
* Delete package lwt.ppx. The PPX syntax is in package lwt_ppx since
Lwt 3.2.0.
* Remove >> syntax from the PPX.
* 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 (initiated Hannes Mehnert).
* Delete package lwt.preemptive. It is an alias for lwt.unix since
Lwt 3.2.0.
* Delete package lwt.syntax. The Camlp4 syntax is in package lwt_camlp4
since Lwt 3.2.0.
* Delete module Lwt_chan, a predecessor of Lwt_io.
* Delete package lwt.simple-top, a predecessor of utop.
* Make resolvers (Lwt.u) contravariant.
(for an upgrade path see the upstream Github site)
4.0.1 is a bugfix release.
The actual fix as been done by "pkglint -F */*/buildlink3.mk", and was
reviewed manually.
There are some .include lines that still are indented with zero spaces
although the surrounding .if is indented. This is existing practice.
infrastructure changes as well (packages for glib, react and ssl support
have been split off). Upstream changes include:
===== 3.1.0 (2017-07-19) =====
====== Additions ======
* Port to Jbuilder (#374, Andrew Ray).
* Lwt_io.establish_server_with_client_address (#346, Rudi Grinberg).
* Lwt_unix.getcwd (#403, Rapha?l Proust).
====== Planned to break in 4.0.0 ======
* Delete lwt.simple-top (#371).
* Delete Lwt_chan (#441).
====== Fixes ======
* Make Lwt_log functions tail-recursive (#348, Jan Doms).
* Make more of Lwt_list tail-recursive (#347, Jan Doms).
* Improve string messages in exceptions (#368, #382, Jan Doms, Rapha?l
Proust).
* Don't call Unix.set_nonblock or Unix.clear_nonblock unnecessarily on
some fds (#356, David Sheets).
* Lwt_unix.sleep and Lwt_unix.timeout returning too early when using
libev (#433, Stijn Devriendt).
* Lwt_sequence.fold_r iterating the wrong way in some cases (#405,
Stijn Devriendt).
* Build conflicts in some cases due to duplicate cst_to_constr
function (#362, J?r?mie Dimino).
* Don't use deprecated readdir_r system call (#430, Rapha?l Proust).
====== Miscellaneous ======
* The Lwt core, lwt.ml, has been thoroughly refactored and commented
(#354, reviewed Gabriel Radanne, Edwin T?r?k, Rapha?l Proust, Jan
Doms, Fabian Hemmer, Sebastien Mondet, Simon Cruanes, Anil
Madhavapeddy, Pierre Chambart, and many others).
* Lots of tests for most of the Lwt core (#339, #389, #392, #440,
#448, #450, Joseph Thomas, Ryan Slade).
* Documentation fixes (including by Joseph Thomas, Rapha?l Proust,
Richard Degenne, Stavros Polymenis).
* Contributing documentation (#379).
* Massively adjust whitespace for legibility (#400, #409, #416,
Richard Degenne).
* Improvements to CI (Etienne Millon, Raphael Rafatpanah, Zack Coker,
Yotam Barnoy).
* 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).
====== Additions ======
* Lwt_unix.readv and Lwt_unix.writev - zero-copy scatter/gather I/O
(#291, #299).
* ?fail_on_error argument for Lwt_log.load_rules (#306, Daniil Baturin).
* Lwt_log.level_of_string (#306, Daniil Baturin).
====== Changes ======
* Lwt_stream.of_list, Lwt_stream.of_array, Lwt_stream.of_string now
immediately push all elements into the created streams
(#239, Spiros Eliopoulos).
====== Deprecations ======
* Lwt_stream.map_exn in favor of Lwt_stream.wrap_exn, which uses OCaml's
standard result type (#295).
====== Bugs fixed ======
* Ungraceful failure if directory handle used after Lwt_unix.closedir (#292).
* Buffer overflow in Lwt_unix.readdir and Lwt_unix.readdir_n (#292).
* Unnecessary allocations in Lwt_unix.readdir_n (#292, found Jeremly Yallop).
====== Miscellaneous ======
* Annotate existing deprecations with [@@ocaml.deprecated ...] (5737f5b).
* Improvements to the examples (#288, Rich Neswold).
* Documentation fixes, including by Rich Neswold.
* New tests and various minor internal improvements.
* Run tests in CI with all OCaml warnings enabled (dadb926).
* Much cleaner build output.
* Add scratch/ directory for local use by developers.
===== 2.6.0 (2016-10-27) =====
====== Additions ======
* Lwt_stream.closed and Lwt_stream.is_closed (#223, Spiros Eliopoulos).
* Lwt_switch.with_switch (#256, Thomas Leonard).
* Define 'a Lwt.result as ('a, exn) result (#247, Simon Cruanes).
* Lwt_condition.broadcast_exn (#241, Nicolas Ojeda Bar).
* Lwt_unix.utimes (#193).
====== Bugfixes ======
* Memory leak in Lwt_unix.readdir_n (#229, diagnosed Thomas Leonard).
* Memory leak in Lwt.protected (#56, #181, reported @ygrek, Mauricio
Fernandez).
* Lwt_switch.turn_off hook exception handling (995b704).
* Handling of ENOTCONN when channels passed to handler of
Lwt_io.establish_server are closed (95fb431).
* Duplicate exceptions on implicit close in Lwt_io.with_connection (b1afe45).
* Deadlock in Lwt_main.at_exit (#48, #114, reported Jérôme Vouillon, Vincent
Bernardoff).
* Performance of Lwt_preemptive.detach (#218, #219, Mauricio Fernandez).
* Bad hash functions for libev loops (#146, reported Mark Christiaens).
* Hash of uninitialized data in Lwt_io (#217, reported Jeremy Yallop).
* Update log sections after Lwt_log.load_rules (#188, reported @rand00).
* Print three digits for milliseconds in Lwt_log (#264, Fabian Hemmer).
* Do not truncate Unix job notification ids in C (#277, diagnosed
@stijn-devriendt).
====== Deprecations ======
* Lwt_stream.on_termination: bind on Lwt_stream.closed instead.
* Lwt.make_value, Lwt.make_error: use result's Ok and Error constructors.
* Lwt_pqueue, Lwt_sequence: use min-heaps and linked lists from another
library (#135).
* Pa_lwt, Pa_lwt_log: use Ppx_lwt.
====== Miscellaneous ======
* Update examples to use PPX syntax instead of Camlp4 (#108, Peter Zotov).
* Set up Travis, AppVeyor for testing on Linux, OS X, Cygwin, and MinGW. MSVC
also planned.
* Large amount of local documentation fixes (Hezekiah Carty, Etienne Millon,
Leo Wzukw, Sebastien Mondet, reports by others).
* A bunch of new tests.
ocaml.mk. It was becoming more trouble than it was worth: only a minority
of packages used it, and it only made Makefiles more confusing.
(I've left out some packages: these will be updated forthwith)
* Lwt_stream.on_terminate -> Lwt_stream.on_termination
* Lwt_unix: handle O_CLOEXEC
* Lwt_log: add OSX syslog path
* Ppx: Improve lwt%match, improve catchall detection
* Add Lwt_unix.file_exists and Lwt_unix.Large_file.file_exists
* Build fixes
* API CHANGE: Functions in Lwt_io that were previously using a
~buffer_size argument now takes a ~buffer argument.
* Accept ?buffer argument in Lwt_ssl.{in,out}_channel_of_descr.
* Use newer Ssl bigarray read/write functionality to avoid
allocation in Lwt_ssl.
* Fix non-reentrant function calls (#136)
* IPv4 multicast support.
* Add support for if%lwt in ppx extension.
* Add Lwt.return_some.
* Disable log syntax extension by default in ppx.
Give [-log] as ppx argument to enable it.
* Nanosecond precision for Lwt_unix.stat.
* Minor fixes + documentation improvements.
* Fix compilation under Windows (#117, #129)
* Fix Lwt_engine.on_timer (#121)
* Add Lwt_log_core.reset_rules (#123)
* Fixed typos in the documentation (#119, #131)
* camlp4 is now optional.
* Add safe_string compliance except for Lwt_ssl (need ocaml-ssl fix).
* Add Lwt.Infix module to open instead of Lwt to have (>>=), etc.
* Add Lwt_list.filter_map_{s,p} functions.
* Add Lwt.fail_{with,invalid_arg} functions.
* Improved Android support.
* Remove deprecated lwt.text and lwt.top libraries.
* Remove deprecated Lwt_signal and Lwt_event modules from
lwt.react.
* Fix#111: try_lwt wrongly warns about unused match case.
* Fix#96: Fix Lwt_react.S.limit and Lwt_react.E.limit.
* Fix#91: Workaround to fix compilation on OSX.
* Add a ppx syntax extension
* Add a ?fd argument to
Lwt_io.{open_connection,with_connection,establish_server}.
* Fix stub for getaddrinfo and getprotobyname
* Windows fix: don't throw an exception in the notification handler
if we're shutting down
* Fix include file search in ./configure
* ./configure fixes for windows
* Fix: use sys_exit instead of exit when Unix.execv fails
Issues found with existing distfiles:
distfiles/eclipse-sourceBuild-srcIncluded-3.0.1.zip
distfiles/fortran-utils-1.1.tar.gz
distfiles/ivykis-0.39.tar.gz
distfiles/enum-1.11.tar.gz
distfiles/pvs-3.2-libraries.tgz
distfiles/pvs-3.2-linux.tgz
distfiles/pvs-3.2-solaris.tgz
distfiles/pvs-3.2-system.tgz
No changes made to these distinfo files.
Otherwise, existing SHA1 digests verified and found to be the same on
the machine holding the existing distfiles (morden). All existing
SHA1 digests retained for now as an audit trail.
Changes:
* Lwt_ssl: expand API to allow setting socket options with Ssl
functions
* fix for camlp4 trunk
* support for React 1.0.0
* add Lwt_sequence.find_node_* functions
* Lwt_log: get backtrace early to overcome exns in
Printexc.to_string
* fix potential deadlock in lwt_unix_recv_notifications
* lwt.glib fixes:
- handle HUP
- fix for BSD/OSX
* do not raise an exception in Lwt_log if argv[0] is blank
* add Android support
* fix issues in stubs for Lwt_unix jobs
* fix compatibility issue with OCaml 4.01
* fix the stub for ev_timer_init
* add Lwt.log containing Lwt_log_core, the Unix-free part of Lwt_log
* add Lwt_ssl.get_fd
* fix stdout/stderr redirections in Lwt_daemon.daemonize
* add Lwt_list.{map,iter}i{_s,_p}
2.4.2
* 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
* Add Lwt_stream.on_terminate
* Fix Lwt_gc
* Fix stubs for get_credentials on *BSD
This is a maintainer update of devel/ocaml-lwt to its newest version, 2.4.0. The
changelog (bugfixes and some enhancements, plus compatibility with ocaml 4.00,
though it should still compile with ocaml 3.12):
- 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
- Compatibility with ocaml 4.00:
add O_SHARE_DELETE to Lwt_unix.open_flag
add -package compiler-libs.toplevel for files using Toploop
- Do not use module Sys for signal handling to avoid ocaml code to be called in a C thread
- Fix Lwt_unix.wrap_syscall: try instead of Lwt.catch
- Fix a dead-lock between lwt_unix_send_notificati
- Fix#277: add a function to return the Ssl.socket of a Lwt_ssl.socket
There have also been a few changes to the package itself; it now uses
PLIST_VARS, and the patches are replaced by the SUBST mechanism.
===== 2.3.2 (2011-11-04) =====
* Add location informations in logs:
** allow loggers to get the current location through local storage
** pass current location to logging functions
** pass the current location with the syntax extension
* Add Lwt.on_termination
* Add Lwt_unix.reinstall_signal_handler
* Add Lwt_io.flush_all
* Add assert_lwt keyword to the syntax extension
* Add Lwt.wrap
* Add Lwt_glib.iter and Lwt_glib.wakeup
* ocaml 3.13 ready
* Allow to compile without libev support
* Fix bugs in Lwt_io
* Better handling of forks
* Fix many problems on Windows
===== 2.3.1 (2011-07-13) =====
* Fix building of documentation when using the tarball
* Add Lwt_unix.fsync and Lwt_unix.fdatasync
* Fix the stubs for Lwt_unix.send_msg when fd-passing is not
available
* Add -lwt-sequence-strict option to the syntax extension
* Use a custom PRNG state for Lwt.choose and Lwt.pick
* Fix a display glitch when starting the toplevel
* Add Lwt_unix.fork which should now be used when one want to use
Lwt in the child process
* Better implementation of Lwt_unix.readlink and
Lwt_unix.gethostbyname, which fixes compilation on Hurd
* Add Lwt.wakeup_later and Lwt.wakeup_later_exn to be used when one
need to do lot of nested wakeup, which fixes a buffer overflow in
Lwt_mutex
* Fix Lwt_unix.abort and Lwt_unix.close (threads was never wakeup)
* Fix Lwt_throttle for correct timings
* Fix subtle use of cancel
===== 2.3.0 (2011-04-12) =====
* Add an extensible system of engines to:
** allow the user to replace libev by another event system, such
as select
** allow easier integration of external libraries supporting
asynchronous operations
* Lots of improvements for windows:
** use the ocaml select instead of libev by default on windows
** make asynchronous operations on non-socket file descriptors
such as pipes to work
** make glib integration to work
* Better use of engines in Lwt_unix: now events are cached to minimize
the amount of calls to epoll_ctl
* Use an eventfd when possible for notifications for faster delivery
* Add modules:
** Lwt_sys: allow to test availability of extra features
** Lwt_react: replace Lwt_event and Lwt_signal
* Allow to configure logging rules at runtime in Lwt_log
* Add match_lwt and while_lwt to the syntax extension
* Fixes:
** syntax extension: handle "lwt ... = ... in ..." at toplevel
** make the notification system fork-proof
** fix an issue with stubs not raising correctly exceptions
===== 2.2.1 (2011-01-26) =====
* Better interaction with Js_of_ocaml.
* Add functions {{{Lwt.register_pause_notifier}}} and {{{Lwt.paused_count}}}.
===== 2.2.0 (2010-12-13) =====
* Bugfixes:
** Fix a bug with cancellable threads causing {{{Canceled}}}
exceptions to be raised randomly
** Fix a fd-leak in Lwt_io.open_connection
* {{{Lwt_unix}}} now use libev instead of select
* Add thread local storage support to {{{Lwt}}}
* Add backtrace support to {{{Lwt}}}. Now {{{Lwt}}} exceptions can
be recored by using the syntax extension with the {{{-lwt-debug}}}
command line switch.
* Allow blocking system calls to be executed in parallels
* Change the type of many functions of {{{Lwt_unix}}}, which now
return a {{{Lwt}}} thread
* Add functions {{{Lwt_unix.readable}}} and {{{Lwt_unix.writable}}}
* Add function {{{Lwt_io.is_busy}}}
* Add functions {{{Lwt_event.delay}}} and {{{Lwt_signal.delay}}}
* Add function {{{Lwt_term.render_update}}}
* Add function {{{Lwt_ssl.embed_socket}}}
* Add module {{{Lwt_bytes}}} defining operations on bigarrays
instead of strings
* Use bigarrays in Lwt_io instead of strings for the internal buffer.
Lwt_io.make now takes a function that uses a bigarray.
* Add module {{{Lwt_switch}}}
===== 2.1.1 (2010-06-13) =====
* Many bugfixes, including:
** buggy behaviour of cancellable threads
** file descriptor leakage in {{{Lwt_unix.accept_n}}}
* Add {{{Lwt.nchoose}}} and {{{Lwt.npick}}}
* Use {{{set_close_on_exec}}} for fds created by {{{Lwt_log}}}
* Better implementation of lwtized react functions
===== 2.1.0 (2010-04-19) =====
* Rename {{{Lwt.select}}} to {{{Lwt.pick}}}
* Removing module {{{Lwt_monitor}}} in favour of {{{Lwt_mutex}}} and
new module {{{Lwt_condition}}}
* More react helpers:
** {{{Lwt_event.next}}}
** {{{Lwt_event.limit}}} and {{{Lwt_signal.limit}}}
** {{{Lwt_event.from}}}
* Adding function {{{Lwt_main.fast_yield}}}
* Adding unit tests
* Optimisation of {{{Lwt}}}
* Adding module {{{Lwt_log}}} for logging
* Adding a camlp4 filter for remmoving logging statement or inlining
tests
* Adding module {{{Lwt_daemon}}}
* Adding function {{{Lwt_unix.recv_msg}}} and {{{Lwt_unix.send_msg}}}
* Adding function {{{Lwt_unix.wait4}}}
* Adding function {{{Lwt_io.establish_server}}}
* Adding module {{{Lwt_list}}}
* Enhancement in {{{Lwt_process}}}, it now support redirections and
timeouts
* Allow to use {{{select}}} on arbitrary high file descriptors
* More commands and features in {{{Lwt_read_line}}}:
** Handle "undo" command
** New controlable read-lines instances
** More edition commands
** Completion as you type
** Backward search
* Enhancement in {{{Lwt_term}}}: more drawing functions and allow to
put the terminal into drawing mode
* Optimisation of {{{Lwt_stream}}}
* Optimisation of {{{Lwt_io.write_char}}} and {{{Lwt_io.read_char}}}
* Bugfix of {{{Lwt_stream}}}: two parallel {{{Lwt_stream.get}}}
returned the same value
* Bugfix in {{{Lwt_unix.connect}}}: it returned immediatly on EINPROGRESS
* Bugfixes in {{{Lwt_glib}}}: file descriptors were not monitored correctly
===== 2.0.0 (2009-10-15) =====
* Adding modules:
** {{{Lwt_stream}}}: lwt-aware version of the {{{Stream}}} module
** {{{Lwt_gc}}} for using {{{finalise}}} without
{{{Lwt_unix.run}}}
** {{{Lwt_io}}}: a new implementation of buffered channels with
more features and better handling of concurrent access
** {{{Lwt_text}}}: implementation of text channels
** {{{Lwt_process}}}: helpers to spawn processes and communicate
with them
** {{{Lwt_main}}} for abstracting the main loop and allowing
replacement by a custom main loop
** {{{Lwt_glib}}} for integration into the glib main event loop
** {{{Lwt_term}}} for interaction with the terminal
** {{{Lwt_read_line}}} for interactive user input
** {{{Lwt_monitor}}}, {{{Lwt_mvar}}}: combined locks for
synchronization with conditional variables for notification
** {{{Lwt_throttle}}} for limiting rate of execution
(e.g. for authentication procedure)
** {{{Lwt_sequence}}}: mutable sequence of elements
** {{{Lwt_event}}}, {{{Lwt_signal}}}: helpers for reactive
programming with lwt
* Adding a syntax extension {{{pa_lwt}}}:
** handles anonymous bind {{{a >> b}}}
** adds syntactic sugar for catching errors (ticket #6)
** adds syntactic sugar for parallel let-binding construction
** adds syntactic sugar for for-like loops
* Top-level integration:
** threads can runs while reading user input
** line editing support
* New enhanced OCaml toplevel with some basic completion features
* Adding C stubs to reimplement {{{Unix.read}}} and {{{Unix.write}}}
with assumption of non-blocking behaviour
* Adding more functions/helpers in {{{Lwt}}}
* Fixing memory leaks in {{{Lwt.choose}}}
* Bugfix in {{{Lwt_chan.close_*}}} (ticket #66)
* Separate the type of threads (covariant) from the type of thread
wakeners (contravariant); the type of many functions related to
{{{Lwt.wait}}} has been changed
* Add cancelable threads
* Unix-dependent part is now put in its own archive and findlib
package.