blob: e689f36917d1220319230e706cdea8e97464be35 [file] [log] [blame] [view]
# 0.3.29 - 2023-10-26
* Add `TryStreamExt::try_ready_chunks` (#2757)
* Add `TryStreamExt::{try_all,try_any}` (#2783)
* Add `UnboundedSender::{len,is_empty}` (#2750)
* Fix `Sync` impl of `FuturesUnordered` (#2788)
* Fix infinite loop caused by invalid UTF-8 bytes (#2785)
* Fix build error with -Z minimal-versions (#2761)
# 0.3.28 - 2023-03-30
* Update to syn 2. This raises MSRV of utility crates to 1.56. (#2730, #2733)
* Fix bug in `FlattenUnordered` (#2726, #2728)
# 0.3.27 - 2023-03-11
* Add `TryFlattenUnordered` (#2577, #2590, #2606, #2607)
* Add `AbortHandle::is_aborted` (#2710)
* Add `AbortRegistration::handle` (#2712)
* Make `BiLock` strict-provenance compatible (#2716)
# 0.3.26 - 2023-01-30
* Add `Either::as_pin_mut` and `Either::as_pin_ref` (#2691)
* Add `Shared::ptr_eq` and `Shared::ptr_hash` (#2691)
* Implement `FusedStream` for `Buffered` (#2676)
* Implement `FusedStream` for all streams in `ReadyChunks` (#2693)
* Fix bug in `FuturesOrdered::push_front` (#2664)
* Remove `Fut::Output: Clone` bounds from some `Shared` methods (#2662)
* Remove `T: Debug` bounds from `Debug` implementations of `mpsc` and `oneshot` types (#2666, #2667)
# 0.3.25 - 2022-10-20
* Fix soundness issue in `join!` and `try_join!` macros (#2649)
* Implement `Clone` for `sink::Drain` (#2650)
# 0.3.24 - 2022-08-29
* Fix incorrect termination of `select_with_strategy` streams (#2635)
# 0.3.23 - 2022-08-14
* Work around MSRV increase due to a cargo bug.
# 0.3.22 - 2022-08-14
* Fix `Sync` impl of `BiLockGuard` (#2570)
* Fix partial iteration in `FuturesUnordered` (#2574)
* Fix false detection of inner panics in `Shared` (#2576)
* Add `Mutex::lock_owned` and `Mutex::try_lock_owned` (#2571)
* Add `io::copy_buf_abortable` (#2507)
* Remove `Unpin` bound from `TryStreamExt::into_async_read` (#2599)
* Make `run_until_stalled` handle self-waking futures (#2593)
* Use `FuturesOrdered` in `try_join_all` (#2556)
* Fix orderings in `LocalPool` waker (#2608)
* Fix `stream::Chunk` adapters size hints (#2611)
* Add `push_front` and `push_back` to `FuturesOrdered` (#2591)
* Deprecate `FuturesOrdered::push` in favor of `FuturesOrdered::push_back` (#2591)
* Performance improvements (#2583, #2626)
* Documentation improvements (#2579, #2604, #2613)
# 0.3.21 - 2022-02-06
* Fix potential data race in `FlattenUnordered` that introduced in 0.3.20 (#2566)
# 0.3.20 - 2022-02-06
NOTE: This release has been yanked due to a bug fixed in 0.3.21.
* Fix stacked borrows violations when `-Zmiri-tag-raw-pointers` is enabled. This raises MSRV of `futures-task` to 1.45. (#2548, #2550)
* Change `FuturesUnordered` to respect yielding from future (#2551)
* Add `StreamExt::{flatten_unordered, flat_map_unordered}` (#2083)
# 0.3.19 - 2021-12-18
* Remove unstable `read-initializer` feature (#2534)
* Fix panic in `FuturesUnordered` (#2535)
* Fix compatibility issue with `FuturesUnordered` and tokio's cooperative scheduling (#2527)
* Add `StreamExt::count` (#2495)
# 0.3.18 - 2021-11-23
NOTE: This release has been yanked. See #2529 for details.
* Fix unusable `Sink` implementation on `stream::Scan` (#2499)
* Make `task::noop_waker_ref` available without `std` feature (#2505)
* Add async `LineWriter` (#2477)
* Remove dependency on `proc-macro-hack`. This raises MSRV of utility crates to 1.45. (#2520)
# 0.3.17 - 2021-08-30
* Use `FuturesOrdered` in `join_all` (#2412)
* Add `{future, stream}::poll_immediate` (#2452)
* Add `stream_select!` macro (#2262)
* Implement `Default` for `OptionFuture` (#2471)
* Add `Peekable::{peek_mut, poll_peek_mut}` (#2488)
* Add `BufReader::seek_relative` (#2489)
# 0.3.16 - 2021-07-23
* Add `TryStreamExt::try_chunks` (#2438)
* Add `StreamExt::{all, any}` (#2460)
* Add `stream::select_with_strategy` (#2450)
* Update to new `io_slice_advance` interface (#2454)
# 0.3.15 - 2021-05-11
* Use `#[proc_macro]` at Rust 1.45+ to fix an issue where proc macros don't work with rust-analyzer (#2407)
* Support targets that do not have atomic CAS on stable Rust (#2400)
* futures-test: Add async `#[test]` function attribute (#2409)
* Add `stream::abortable` (#2410)
* Add `FuturesUnordered::clear` (#2415)
* Implement `IntoIterator` for `FuturesUnordered` (#2423)
* Implement `Send` and `Sync` for `FuturesUnordered` iterators (#2416)
* Make `FuturesUnordered::iter_pin_ref` public (#2423)
* Add `SelectAll::clear` (#2430)
* Add `SelectAll::{iter, iter_mut}` (#2428)
* Implement `IntoIterator` for `SelectAll` (#2428)
* Implement `Clone` for `WeakShared` (#2396)
# 0.3.14 - 2021-04-10
* Add `future::SelectAll::into_inner` (#2363)
* Allow calling `UnboundedReceiver::try_next` after `None` (#2369)
* Reexport non-Ext traits from the root of `futures_util` (#2377)
* Add `AsyncSeekExt::stream_position` (#2380)
* Add `stream::Peekable::{next_if, next_if_eq}` (#2379)
# 0.3.13 - 2021-02-23
* Mitigated starvation issues in `FuturesUnordered` (#2333)
* Fixed race with dropping `mpsc::Receiver` (#2304)
* Added `Shared::{strong_count, weak_count}` (#2346)
* Added `no_std` support for `task::noop_waker_ref` (#2332)
* Implemented `Stream::size_hint` for `Either` (#2325)
# 0.3.12 - 2021-01-15
* Fixed `Unpin` impl of `future::{MaybeDone, TryMaybeDone}` where trait bounds were accidentally added in 0.3.9. (#2317)
# 0.3.11 - 2021-01-14
* Fixed heap buffer overflow in `AsyncReadExt::{read_to_end, read_to_string}` (#2314)
# 0.3.10 - 2021-01-13
NOTE: This release has been yanked. See #2310 for details.
* Fixed type-inference in `sink::unfold` by specifying more of its types (breaking change -- see #2311)
# 0.3.9 - 2021-01-08
NOTE: This release has been yanked. See #2310 for details.
* Significantly improved compile time when `async-await` crate feature is disabled (#2273)
* Added `stream::repeat_with` (#2279)
* Added `StreamExt::unzip` (#2263)
* Added `sink::unfold` (#2268)
* Added `SinkExt::feed` (#2155)
* Implemented `FusedFuture` for `oneshot::Receiver` (#2300)
* Implemented `Clone` for `sink::With` (#2290)
* Re-exported `MapOkOrElse`, `MapInto`, `OkInto`, `TryFlatten`, `WriteAllVectored` (#2275)
# 0.3.8 - 2020-11-04
NOTE: This release has been yanked. See #2310 for details.
* Switched proc-macros to use native `#[proc_macro]` at Rust 1.45+ (#2243)
* Added `WeakShared` (#2169)
* Added `TryStreamExt::try_buffered` (#2245)
* Added `StreamExt::cycle` (#2252)
* Implemented `Clone` for `stream::{Empty, Pending, Repeat, Iter}` (#2248, #2252)
* Fixed panic in some `TryStreamExt` combinators (#2250)
# 0.3.7 - 2020-10-23
NOTE: This release has been yanked. See #2310 for details.
* Fixed unsoundness in `MappedMutexGuard` (#2240)
* Re-exported `TakeUntil` (#2235)
* futures-test: Prevent double panic in `panic_waker` (#2236)
# 0.3.6 - 2020-10-06
NOTE: This release has been yanked. See #2310 for details.
* Fixed UB due to missing 'static on `task::waker` (#2206)
* Added `AsyncBufReadExt::fill_buf` (#2225)
* Added `TryStreamExt::try_take_while` (#2212)
* Added `is_connected_to` method to `mpsc::{Sender, UnboundedSender}` (#2179)
* Added `is_connected_to` method to `oneshot::Sender` (#2158)
* Implement `FusedStream` for `FuturesOrdered` (#2205)
* Fixed documentation links
* Improved documentation
* futures-test: Added `track_closed` method to `AsyncWriteTestExt` and `SinkTestExt` (#2159)
* futures-test: Implemented more traits for `InterleavePending` (#2208)
* futures-test: Implemented more traits for `AssertUnmoved` (#2208)
# 0.3.5 - 2020-05-08
NOTE: This release has been yanked. See #2310 for details.
* Added `StreamExt::flat_map`.
* Added `StreamExt::ready_chunks`.
* Added `*_unpin` methods to `SinkExt`.
* Added a `cancellation()` future to `oneshot::Sender`.
* Added `reunite` method to `ReadHalf` and `WriteHalf`.
* Added `Extend` implementations for `Futures(Un)Ordered` and `SelectAll`.
* Added support for reexporting the `join!` and `select!` macros.
* Added `no_std` support for the `pending!` and `poll!` macros.
* Added `Send` and `Sync` support for `AssertUnmoved`.
* Fixed a bug where `Shared` wasn't relinquishing control to the executor.
* Removed the `Send` bound on the output of `RemoteHandle`.
* Relaxed bounds on `FuturesUnordered`.
* Reorganized internal tests to work under different `--feature`s.
* Reorganized the bounds on `StreamExt::forward`.
* Removed and replaced a large amount of internal `unsafe`.
# 0.3.4 - 2020-02-06
NOTE: This release has been yanked. See #2310 for details.
* Fixed missing `Drop` for `UnboundedReceiver` (#2064)
# 0.3.3 - 2020-02-04
NOTE: This release has been yanked. See #2310 for details.
* Fixed compatibility issue with pinned facade (#2062)
# 0.3.2 - 2020-02-03
NOTE: This release has been yanked. See #2310 for details.
* Improved buffering performance of `SplitSink` (#1969)
* Added `select_biased!` macro (#1976)
* Added `hash_receiver` method to mpsc channel (#1962)
* Added `stream::try_unfold` (#1977)
* Fixed bug with zero-size buffers in vectored IO (#1998)
* `AtomicWaker::new()` is now `const fn` (#2007)
* Fixed bug between threadpool and user park/unparking (#2010)
* Added `stream::Peekable::peek` (#2021)
* Added `StreamExt::scan` (#2044)
* Added impl of `AsyncRead`/`Write` for `BufReader`/`Writer` (#2033)
* Added impl of `Spawn` and `LocalSpawn` for `Arc<impl Spawn` and `Rc<impl Spawn>` (#2039)
* Fixed `Sync` issues with `FuturesUnordered` (#2054)
* Added `into_inner` method for `future::Ready` (#2055)
* Added `MappedMutexGuard` API (#2056)
* Mitigated starvation issues in `FuturesUnordered` (#2049)
* Added `TryFutureExt::map_ok_or_else` (#2058)
# 0.3.1 - 2019-11-07
NOTE: This release has been yanked. See #2310 for details.
* Fix signature of `SpawnExt` and `LocalSpawnExt` trait (breaking change -- see #1959)
# 0.3.0 - 2019-11-05
NOTE: This release has been yanked. See #2310 for details.
* Stable release along with stable async/await!
* Added async/await to default features (#1953)
* Changed `Spawn` trait and `FuturesUnordered::push` to take `&self` (#1950)
* Moved `Spawn` and `FutureObj` out of `futures-core` and into `futures-task` (#1925)
* Changed case convention for feature names (#1937)
* Added `executor` feature (#1949)
* Moved `copy_into`/`copy_buf_into` (#1948)
* Changed `SinkExt::send_all` to accept a `TryStream` (#1946)
* Removed `ThreadPool::run` (#1944)
* Changed to use our own definition of `io::Cursor` (#1943)
* Removed `BufReader::poll_seek_relative` (#1938)
* Changed `skip` to take a `usize` rather than `u64` (#1931)
* Removed `Stream` impl for `VecDeque` (#1930)
* Renamed `Peekable::peek` to `poll_peek` (#1928)
* Added immutable iterators for `FuturesUnordered` (#1922)
* Made `ThreadPool` optional (#1910)
* Renamed `oneshot::Sender::poll_cancel` to `poll_canceled` (#1908)
* Added some missing `Clone` implementations
* Documentation fixes
# 0.3.0-alpha.19 - 2019-09-25
* Stabilized the `async-await` feature (#1816)
* Made `async-await` feature no longer require `std` feature (#1815)
* Updated `proc-macro2`, `syn`, and `quote` to 1.0 (#1798)
* Exposed unstable `BiLock` (#1827)
* Renamed "nightly" feature to "unstable" (#1823)
* Moved to our own `io::{Empty, Repeat, Sink}` (#1829)
* Made `AsyncRead::initializer` API unstable (#1845)
* Moved the `Never` type from `futures-core` to `futures-util` (#1836)
* Fixed use-after-free on panic in `ArcWake::wake_by_ref` (#1797)
* Added `AsyncReadExt::chain` (#1810)
* Added `Stream::size_hint` (#1853)
* Added some missing `FusedFuture` (#1868) and `FusedStream` implementations (#1831)
* Added a `From` impl for `Mutex` (#1839)
* Added `Mutex::{get_mut, into_inner}` (#1839)
* Re-exported `TryConcat` and `TryFilter` (#1814)
* Lifted `Unpin` bound and implemented `AsyncBufRead` for `io::Take` (#1821)
* Lifted `Unpin` bounds on `get_pin_mut` (#1820)
* Changed `SendAll` to flush the `Sink` when the source `Stream` is pending (#1877)
* Set default threadpool size to one if `num_cpus::get()` returns zero (#1835)
* Removed dependency on `rand` by using our own PRNG (#1837)
* Removed `futures-core` dependency from `futures-sink` (#1832)
# 0.3.0-alpha.18 - 2019-08-09
* Rewrote `join!` and `try_join!` as procedural macros to allow passing expressions (#1783)
* Banned manual implementation of `TryFuture` and `TryStream` for forward compatibility. See #1776 for more details. (#1777)
* Changed `AsyncReadExt::read_to_end` to return the total number of bytes read (#1721)
* Changed `ArcWake::into_waker` to a free function `waker` (#1676)
* Supported trailing commas in macros (#1733)
* Removed futures-channel dependency from futures-executor (#1735)
* Supported `channel::oneshot` in no_std environment (#1749)
* Added `Future` bounds to `FusedFuture` (#1779)
* Added `Stream` bounds to `FusedStream` (#1779)
* Changed `StreamExt::boxed` to return `BoxStream` (#1780)
* Added `StreamExt::boxed_local` (#1780)
* Added `AsyncReadExt::read_to_string` (#1721)
* Implemented `AsyncWrite` for `IntoAsyncRead` (#1734)
* Added get_ref, get_mut and into_inner methods to `Compat01As03` and `Compat01As03Sink` (#1705)
* Added `ThreadPool::{spawn_ok, spawn_obj_ok}` (#1750)
* Added `TryStreamExt::try_flatten` (#1731)
* Added `FutureExt::now_or_never` (#1747)
# 0.3.0-alpha.17 - 2019-07-03
* Removed `try_ready!` macro in favor of `ready!(..)?`. (#1602)
* Removed `io::Window::{set_start, set_end}` in favor of `io::Window::set`. (#1667)
* Re-exported `pin_utils::pin_mut!` macro. (#1686)
* Made all extension traits unnamed in the prelude. (#1662)
* Allowed `?Sized` types in some methods and structs. (#1647)
* Added `Send + Sync` bounds to `ArcWake` trait to fix unsoundness. (#1654)
* Changed `AsyncReadExt::copy_into` to consume `self`. (#1674)
* Renamed `future::empty` to `pending`. (#1689)
* Added `#[must_use]` to some combinators. (#1600)
* Added `AsyncWriteExt::{write, write_vectored}`. (#1612)
* Added `AsyncReadExt::read_vectored`. (#1612)
* Added `TryFutureExt::try_poll_unpin`. (#1613)
* Added `TryFutureExt::try_flatten_stream`. (#1618)
* Added `io::BufWriter`. (#1608)
* Added `Sender::same_receiver` and `UnboundedSender::same_receiver`. (#1617)
* Added `future::try_select`. (#1622)
* Added `TryFutureExt::{inspect_ok, inspect_err}`. (#1630)
* Added `Compat::get_ref`. (#1648)
* Added `io::Window::set`. (#1667)
* Added `AsyncWriteExt::into_sink`. (#1675)
* Added `AsyncBufReadExt::copy_buf_into`. (#1674)
* Added `stream::pending`. (#1689)
* Implemented `std::error::Error` for `SpawnError`. (#1604)
* Implemented `Stream` for `FlattenSink`. (#1651)
* Implemented `Sink` for `TryFlattenStream`. (#1651)
* Implemented `AsyncRead`, `AsyncWrite`, `AsyncSeek`, `AsyncBufRead`, `FusedFuture` and `FusedStream` for Either. (#1695)
* Replaced empty enums with `Never` type, an alias for `core::convert::Infallible`.
* Removed the `futures-channel` dependency from `futures-sink` and make `futures-sink`
an optional dependency of `futures-channel`.
* Renamed `Sink::SinkError` to `Sink::Error`.
* Made a number of dependencies of `futures-util` optional.
# 0.3.0-alpha.16 - 2019-05-10
* Updated to new nightly `async_await`.
* Changed `AsyncRead::poll_vectored_read` and `AsyncWrite::poll_vectored_write` to use
stabilized `std::io::{IoSlice, IoSliceMut}` instead of `iovec::IoVec`, and renamed to
`AsyncRead::poll_read_vectored` and `AsyncWrite::poll_write_vectored`.
* Added `LocalBoxFuture` and `FutureExt::boxed_local`.
* Added `TryStreamExt::{try_filter, inspect_ok, inspect_err}`.
* Added `try_future::select_ok`.
* Added `AsyncBufReadExt::{read_line, lines}`.
* Added `io::BufReader`.
# 0.3.0-alpha.15 - 2019-04-26
* Updated to stabilized `futures_api`.
* Removed `StreamObj`, cautioned against usage of `FutureObj`.
* Changed `StreamExt::select` to a function.
* Added `AsyncBufRead` and `AsyncSeek` traits.
* Expanded trait impls to include more pinned pointers and ?Sized types.
* Added `future::Fuse::terminated` constructor.
* Added `never_error` combinator.
* Added `StreamExt::enumerate`.
* Re-added `TryStreamExt::{and_then, or_else}`.
* Added functions to partially progress a local pool.
* Changed to use our own `Either` type rather than the one from the `either` crate.
# 0.3.0-alpha.14 - 2019-04-15
* Updated to new nightly `futures_api`.
* Changed `Forward` combinator to drop sink after completion, and allow `!Unpin` `Sink`s.
* Added 0.1 <-> 0.3 compatibility shim for `Sink`s.
* Changed `Sink::Item` to a generic parameter `Sink<Item>`, allowing `Sink`s to accept
multiple different types, including types containing references.
* Changed `AsyncRead` and `AsyncWrite` to take `Pin<&mut Self>` rather than `&mut self`.
* Added support for `no_std` + `alloc` use.
* Changed `join` and `try_join` combinators to functions.
* Fixed propagation of `cfg-target-has-atomic` feature.
# 0.3.0-alpha.13 - 2019-02-20
* Updated to new nightly with stabilization candidate API.
* Removed `LocalWaker`.
* Added `#[must_use]` to `Stream` and `Sink` traits.
* Enabled using `!Unpin` futures in `JoinAll`.
* Added the `try_join_all` combinator.
* Stopped closing a whole channel upon closing of one sender.
* Removed `TokioDefaultSpawner` and `tokio-compat`.
* Moved intra-crate dependencies to exact versions.
# 0.3.0-alpha.12 - 2019-01-14
* Updated to new nightly with a modification to `Pin::set`.
* Expose `AssertUnmoved` and `PendingOnce`.
* Prevent double-panic in `AssertUnmoved`.
* Support nested invocations of the `select!` macro.
* Implement `Default` for `Mutex` and `SelectAll`.
# 0.3.0-alpha.11 - 2018-12-27
* Updated to newly stabilized versions of the `pin` and `arbitrary_self_types` features.
* Re-added `select_all` for streams.
* Added `TryStream::into_async_read` for converting from a stream of bytes into
an `AsyncRead`.
* Added `try_poll_next_unpin`.
* Rewrote `select!` as a procedural macro for better error messages
* Exposed `join_all` from the facade
# 0.3.0-alpha.10 - 2018-11-27
* Revamped `select!` macro
* Added `select_next_some` method for getting only the `Some` elements of a stream from `select!`
* Added `futures::lock::Mutex` for async-aware synchronization.
* Fixed bug converting `Pin<Box<_>>` to `StreamObj`
* Improved performance of futures::channel
* Improved performance and documentation of `Shared`
* Add `new` method and more `derive`s to the `Compat` type
* Enabled spawning on a borrowed threadpool
* Re-added `join_all`
* Added `try_concat`
# 0.3.0-alpha.9 - 2018-10-18
* Fixed in response to new nightly handling of 2018 edition + `#![no_std]`
# 0.3.0-alpha.8 - 2018-10-16
* Fixed stack overflow in 0.1 compatibility layer
* Added AsyncRead / AsyncWrite compatibility layer
* Added Spawn -> 0.1 Executor compatibility
* Made 0.1 futures usable on 0.3 executors without an additional global `Task`, accomplished by wrapping 0.1 futures in an 0.1 `Spawn` when using them as 0.3 futures.
* Cleanups and improvements to the `AtomicWaker` implementation.
# 0.3.0-alpha.7 - 2018-10-01
* Update to new nightly which removes `Spawn` from `task::Context` and replaces `Context` with `LocalWaker`.
* Add `Spawn` and `LocalSpawn` traits and `FutureObj` and `LocalFutureObj` types to `futures-core`.
# 0.3.0-alpha.6 - 2018-09-10
* Replace usage of `crate` visibility with `pub(crate)` now that `crate` visibility is no longer included in the 2018 edition
* Remove newly-stabilized "edition" feature in Cargo.toml files
# 0.3.0-alpha.5 - 2018-09-03
* Revert usage of cargo crate renaming feature
# 0.3.0-alpha.4 - 2018-09-02
**Note: This release does not work, use `0.3.0-alpha.5` instead**
* `future::ok` and `future:err` to create result wrapping futures (similar to `future::ready`)
* `futures-test` crate with testing utilities
* `StreamExt::boxed` combinator
* Unsoundness fix for `FuturesUnordered`
* `StreamObj` (similar to `FutureObj`)
* Code examples for compatibility layer functions
* Use cargo create renaming feature to import `futures@0.1` for compatibility layer
* Import pinning APIs from `core::pin`
* Run Clippy in CI only when it is available
# 0.3.0-alpha.3 - 2018-08-15
* Compatibility with newest nightly
* Futures 0.1 compatibility layer including Tokio compatibility
* Added `spawn!` and `spawn_with_handle!` macros
* Added `SpawnExt` methods `spawn` and `spawn_with_handle`
* Extracted pin macros into `pin_utils` crate
* Added `FutureExt` combinators `boxed` and `unit_error`
* Remove prelude from all doc examples (The prelude is still recommended for usage in playground examples. However, for doc examples we determined that fully expanded imports are more helpful)
* Improvements to `select!` and `join!` macros
* Added `try_join!` macro
* Added `StreamExt` combinator methods `try_join` and `for_each_concurrent`
* Added `TryStreamExt` combinator methods `into_stream`, `try_filter_map`, `try_skip_while`, `try_for_each_concurrent` and `try_buffer_unordered`
* Fix stream termination bug in `StreamExt::buffered` and `StreamExt::buffer_unordered`
* Added docs for `StreamExt::buffered`, `StreamExt::buffer_unordered`
* Added `task::local_waker_ref_from_nonlocal` and `task::local_waker_ref` functions
* CI improvements
* Doc improvements to `StreamExt::select`
# 0.3.0-alpha.2 - 2018-07-30
* The changelog is back!
* Compatibility with futures API in latest nightly
* Code examples and doc improvements
* IO: Methods of traits `AsyncReadExt`, `AsyncWriteExt`
* Future:
* Methods of trait `TryFutureExt`
* Free functions `empty`, `lazy`, `maybe_done`, `poll_fn` and `ready`
* Type `FutureOption`
* Macros `join!`, `select!` and `pending!`
* Stream: Methods of trait `TryStreamExt`
* Added `TryStreamExt` combinators `map_ok`, `map_err`, `err_into`, `try_next` and `try_for_each`
* Added `Drain`, a sink that will discard all items given to it. Can be created using the `drain` function
* Bugfix for the `write_all` combinator
* `AsyncWrite` impl for `Cursor<T: AsMut<[u8]>>`
* `FuturesUnordered` optimization: Since the context stores a `&LocalWaker` reference, it was possible to avoid cloning the `Arc` of the waker
* Futures-rs now uses Clippy
* We now use in-band lifetimes
* The `join!` and `select!` macros are now exposed by the `futures` crate
* The project logo was added to the `README.md`
* `sink::MapErr::get_pinned_mut` is now called `get_pin_mut`
* We now use the unstable `use_extern_macros` feature for macro reexports
* CI improvements: Named CI jobs, tests are now run on macOS and Linux, the docs are generated and Clippy needs to pass
* `#[deny(warnings)]` was removed from all crates and is now only enforced in the CI
* We now have a naming convention for type parameters: `Fut` future, `F` function, `St` stream, `Si` sink, `S` sink & stream, `R` reader, `W` writer, `T` value, `E` error
* "Task" is now defined as our term for "lightweight thread". The code of the executors and `FuturesUnordered` was refactored to align with this definition.
# 0.3.0-alpha.1 - 2018-07-19
* Major changes: See [the announcement](https://rust-lang-nursery.github.io/futures-rs/blog/2018/07/19/futures-0.3.0-alpha.1.html) on our new blog for details. The changes are too numerous to be covered in this changelog because nearly every line of code was modified.
# 0.1.17 - 2017-10-31
* Add a `close` method on `sink::Wait`
* Undeprecate `stream::iter` as `stream::iter_result`
* Improve performance of wait-related methods
* Tweak buffered sinks with a 0 capacity to forward directly to the underlying
sink.
* Add `FromIterator` implementation for `FuturesOrdered` and `FuturesUnordered`.
# 0.1.16 - 2017-09-15
* A `prelude` module has been added to glob import from and pick up a whole
bunch of useful types
* `sync::mpsc::Sender::poll_ready` has been added as an API
* `sync::mpsc::Sender::try_send` has been added as an API
# 0.1.15 - 2017-08-24
* Improve performance of `BiLock` methods
* Implement `Clone` for `FutureResult`
* Forward `Stream` trait through `SinkMapErr`
* Add `stream::futures_ordered` next to `futures_unordered`
* Reimplement `Stream::buffered` on top of `stream::futures_ordered` (much more
efficient at scale).
* Add a `with_notify` function for abstractions which previously required
`UnparkEvent`.
* Add `get_ref`/`get_mut`/`into_inner` functions for stream take/skip methods
* Add a `Clone` implementation for `SharedItem` and `SharedError`
* Add a `mpsc::spawn` function to spawn a `Stream` into an `Executor`
* Add a `reunite` function for `BiLock` and the split stream/sink types to
rejoin two halves and reclaim the original item.
* Add `stream::poll_fn` to behave similarly to `future::poll_fn`
* Add `Sink::with_flat_map` like `Iterator::flat_map`
* Bump the minimum Rust version to 1.13.0
* Expose `AtomicTask` in the public API for managing synchronization around task
notifications.
* Unify the `Canceled` type of the `sync` and `unsync` modules.
* Deprecate the `boxed` methods. These methods have caused more confusion than
they've solved historically, so it's recommended to use a local extension
trait or a local helper instead of the trait-based methods.
* Deprecate the `Stream::merge` method as it's less ergonomic than `select`.
* Add `oneshot::Sender::is_canceled` to test if a oneshot is canceled off a
task.
* Deprecates `UnboundedSender::send` in favor of a method named `unbounded_send`
to avoid a conflict with `Sink::send`.
* Deprecate the `stream::iter` function in favor of an `stream::iter_ok` adaptor
to avoid the need to deal with `Result` manually.
* Add an `inspect` function to the `Future` and `Stream` traits along the lines
of `Iterator::inspect`
# 0.1.14 - 2017-05-30
This is a relatively large release of the `futures` crate, although much of it
is from reworking internals rather than new APIs. The banner feature of this
release is that the `futures::{task, executor}` modules are now available in
`no_std` contexts! A large refactoring of the task system was performed in
PR #436 to accommodate custom memory allocation schemes and otherwise remove
all dependencies on `std` for the task module. More details about this change
can be found on the PR itself.
Other API additions in this release are:
* A `FuturesUnordered::push` method was added and the `FuturesUnordered` type
itself was completely rewritten to efficiently track a large number of
futures.
* A `Task::will_notify_current` method was added with a slightly different
implementation than `Task::is_current` but with stronger guarantees and
documentation wording about its purpose.
* Many combinators now have `get_ref`, `get_mut`, and `into_inner` methods for
accessing internal futures and state.
* A `Stream::concat2` method was added which should be considered the "fixed"
version of `concat`, this one doesn't panic on empty streams.
* An `Executor` trait has been added to represent abstracting over the concept
of spawning a new task. Crates which only need the ability to spawn a future
can now be generic over `Executor` rather than requiring a
`tokio_core::reactor::Handle`.
As with all 0.1.x releases this PR is intended to be 100% backwards compatible.
All code that previously compiled should continue to do so with these changes.
As with other changes, though, there are also some updates to be aware of:
* The `task::park` function has been renamed to `task::current`.
* The `Task::unpark` function has been renamed to `Task::notify`, and in general
terminology around "unpark" has shifted to terminology around "notify"
* The `Unpark` trait has been deprecated in favor of the `Notify` trait
mentioned above.
* The `UnparkEvent` structure has been deprecated. It currently should perform
the same as it used to, but it's planned that in a future 0.1.x release the
performance will regress for crates that have not transitioned away. The
primary primitive to replace this is the addition of a `push` function on the
`FuturesUnordered` type. If this does not help implement your use case though,
please let us know!
* The `Task::is_current` method is now deprecated, and you likely want to use
`Task::will_notify_current` instead, but let us know if this doesn't suffice!
# 0.1.13 - 2017-04-05
* Add forwarding sink/stream impls for `stream::FromErr` and `sink::SinkFromErr`
* Add `PartialEq` and `Eq` to `mpsc::SendError`
* Reimplement `Shared` with `spawn` instead of `UnparkEvent`
# 0.1.12 - 2017-04-03
* Add `Stream::from_err` and `Sink::from_err`
* Allow `SendError` to be `Clone` when possible
# 0.1.11 - 2017-03-13
The major highlight of this release is the addition of a new "default" method on
the `Sink` trait, `Sink::close`. This method is used to indicate to a sink that
no new values will ever need to get pushed into it. This can be used to
implement graceful shutdown of protocols and otherwise simply indicates to a
sink that it can start freeing up resources.
Currently this method is **not** a default method to preserve backwards
compatibility, but it's intended to become a default method in the 0.2 series of
the `futures` crate. It's highly recommended to audit implementations of `Sink`
to implement the `close` method as is fit.
Other changes in this release are:
* A new select combinator, `Future::select2` was added for a heterogeneous
select.
* A `Shared::peek` method was added to check to see if it's done.
* `Sink::map_err` was implemented
* The `log` dependency was removed
* Implementations of the `Debug` trait are now generally available.
* The `stream::IterStream` type was renamed to `stream::Iter` (with a reexport
for the old name).
* Add a `Sink::wait` method which returns an adapter to use an arbitrary `Sink`
synchronously.
* A `Stream::concat` method was added to concatenate a sequence of lists.
* The `oneshot::Sender::complete` method was renamed to `send` and now returns a
`Result` indicating successful transmission of a message or not. Note that the
`complete` method still exists, it's just deprecated.
# 0.1.10 - 2017-01-30
* Add a new `unsync` module which mirrors `sync` to the extent that it can but
is intended to not perform cross-thread synchronization (only usable within
one thread).
* Tweak `Shared` to work when handles may not get poll'd again.
# 0.1.9 - 2017-01-18
* Fix `Send/Sync` of a few types
* Add `future::tail_fn` for more easily writing loops
* Export SharedItem/SharedError
* Remove an unused type parameter in `from_err`
# 0.1.8 - 2017-01-11
* Fix some race conditions in the `Shared` implementation
* Add `Stream::take_while`
* Fix an unwrap in `stream::futures_unordered`
* Generalize `Stream::for_each`
* Add `Stream::chain`
* Add `stream::repeat`
* Relax `&mut self` to `&self` in `UnboundedSender::send`
# 0.1.7 - 2016-12-18
* Add a `Future::shared` method for creating a future that can be shared
amongst threads by cloning the future itself. All derivative futures
will resolve to the same value once the original future has been
resolved.
* Add a `FutureFrom` trait for future-based conversion
* Fix a wakeup bug in `Receiver::close`
* Add `future::poll_fn` for quickly adapting a `Poll`-based function to
a future.
* Add an `Either` enum with two branches to easily create one future
type based on two different futures created on two branches of control
flow.
* Remove the `'static` bound on `Unpark`
* Optimize `send_all` and `forward` to send as many items as possible
before calling `poll_complete`.
* Unify the return types of the `ok`, `err`, and `result` future to
assist returning different varieties in different branches of a function.
* Add `CpuFuture::forget` to allow the computation to continue running
after a drop.
* Add a `stream::futures_unordered` combinator to turn a list of futures
into a stream representing their order of completion.
# 0.1.6 - 2016-11-22
* Fix `Clone` bound on the type parameter on `UnboundedSender`
# 0.1.5 - 2016-11-22
* Fix `#![no_std]` support
# 0.1.4 - 2016-11-22
This is quite a large release relative to the previous point releases! As
with all 0.1 releases, this release should be fully compatible with the 0.1.3
release. If any incompatibilities are discovered please file an issue!
The largest changes in 0.1.4 are the addition of a `Sink` trait coupled with a
reorganization of this crate. Note that all old locations for types/traits
still exist, they're just deprecated and tagged with `#[doc(hidden)]`.
The new `Sink` trait is used to represent types which can periodically over
time accept items, but may take some time to fully process the item before
another can be accepted. Essentially, a sink is the opposite of a stream. This
trait will then be used in the tokio-core crate to implement simple framing by
modeling I/O streams as both a stream and a sink of frames.
The organization of this crate is to now have three primary submodules,
`future`, `stream`, and `sink`. The traits as well as all combinator types are
defined in these submodules. The traits and types like `Async` and `Poll` are
then reexported at the top of the crate for convenient usage. It should be a
relatively rare occasion that the modules themselves are reached into.
Finally, the 0.1.4 release comes with a new module, `sync`, in the futures
crate. This is intended to be the home of a suite of futures-aware
synchronization primitives. Currently this is inhabited with a `oneshot` module
(the old `oneshot` function), a `mpsc` module for a new multi-producer
single-consumer channel, and a `BiLock` type which represents sharing ownership
of one value between two consumers. This module may expand over time with more
types like a mutex, rwlock, spsc channel, etc.
Notable deprecations in the 0.1.4 release that will be deleted in an eventual
0.2 release:
* The `TaskRc` type is now deprecated in favor of `BiLock` or otherwise `Arc`
sharing.
* All future combinators should be accessed through the `future` module, not
the top-level of the crate.
* The `Oneshot` and `Complete` types are now replaced with the `sync::oneshot`
module.
* Some old names like `collect` are deprecated in favor of more appropriately
named versions like `join_all`
* The `finished` constructor is now `ok`.
* The `failed` constructor is now `err`.
* The `done` constructor is now `result`.
As always, please report bugs to https://github.com/rust-lang-nursery/futures-rs and
we always love feedback! If you've got situations we don't cover, combinators
you'd like to see, or slow code, please let us know!
Full changelog:
* Improve scalability of `buffer_unordered` combinator
* Fix a memory ordering bug in oneshot
* Add a new trait, `Sink`
* Reorganize the crate into three primary modules
* Add a new `sync` module for synchronization primitives
* Add a `BiLock` sync primitive for two-way sharing
* Deprecate `TaskRc`
* Rename `collect` to `join_all`
* Use a small vec in `Events` for improved clone performance
* Add `Stream::select` for selecting items from two streams like `merge` but
requiring the same types.
* Add `stream::unfold` constructor
* Add a `sync::mpsc` module with a futures-aware multi-producer single-consumer
queue. Both bounded (with backpressure) and unbounded (no backpressure)
variants are provided.
* Renamed `failed`, `finished`, and `done` combinators to `err`, `ok`, and
`result`.
* Add `Stream::forward` to send all items to a sink, like `Sink::send_all`
* Add `Stream::split` for streams which are both sinks and streams to have
separate ownership of the stream/sink halves
* Improve `join_all` with concurrency
# 0.1.3 - 2016-10-24
* Rewrite `oneshot` for efficiency and removing allocations on send/recv
* Errors are passed through in `Stream::take` and `Stream::skip`
* Add a `select_ok` combinator to pick the first of a list that succeeds
* Remove the unnecessary `SelectAllNext` typedef
* Add `Stream::chunks` for receiving chunks of data
* Rewrite `stream::channel` for efficiency, correctness, and removing
allocations
* Remove `Send + 'static` bounds on the `stream::Empty` type
# 0.1.2 - 2016-10-04
* Fixed a bug in drop of `FutureSender`
* Expose the channel `SendError` type
* Add `Future::into_stream` to convert to a single-element stream
* Add `Future::flatten_to_stream` to convert a future of a stream to a stream
* impl Debug for SendError
* Add stream::once for a one element stream
* Accept IntoIterator in stream::iter
* Add `Stream::catch_unwind`
# 0.1.1 - 2016-09-09
Initial release!