Differential Revision: https://phabricator.services.mozilla.com/D117790
13 KiB
Note: This CHANGELOG is no longer maintained for newer 0.1.x releases. See instead the github release tags and individual git commits.
0.1.17 - 2017-10-31
- Add a
close
method onsink::Wait
- Undeprecate
stream::iter
asstream::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 forFuturesOrdered
andFuturesUnordered
.
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 APIsync::mpsc::Sender::try_send
has been added as an API
0.1.15 - 2017-08-24
- Improve performance of
BiLock
methods - Implement
Clone
forFutureResult
- Forward
Stream
trait throughSinkMapErr
- Add
stream::futures_ordered
next tofutures_unordered
- Reimplement
Stream::buffered
on top ofstream::futures_ordered
(much more efficient at scale). - Add a
with_notify
function for abstractions which previously requiredUnparkEvent
. - Add
get_ref
/get_mut
/into_inner
functions for stream take/skip methods - Add a
Clone
implementation forSharedItem
andSharedError
- Add a
mpsc::spawn
function to spawn aStream
into anExecutor
- Add a
reunite
function forBiLock
and the split stream/sink types to rejoin two halves and reclaim the original item. - Add
stream::poll_fn
to behave similarly tofuture::poll_fn
- Add
Sink::with_flat_map
likeIterator::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 thesync
andunsync
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 thanselect
. - Add
oneshot::Sender::is_canceled
to test if a oneshot is canceled off a task. - Deprecates
UnboundedSender::send
in favor of a method namedunbounded_send
to avoid a conflict withSink::send
. - Deprecate the
stream::iter
function in favor of anstream::iter_ok
adaptor to avoid the need to deal withResult
manually. - Add an
inspect
function to theFuture
andStream
traits along the lines ofIterator::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 theFuturesUnordered
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 thanTask::is_current
but with stronger guarantees and documentation wording about its purpose. - Many combinators now have
get_ref
,get_mut
, andinto_inner
methods for accessing internal futures and state. - A
Stream::concat2
method was added which should be considered the "fixed" version ofconcat
, 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 overExecutor
rather than requiring atokio_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 totask::current
. - The
Task::unpark
function has been renamed toTask::notify
, and in general terminology around "unpark" has shifted to terminology around "notify" - The
Unpark
trait has been deprecated in favor of theNotify
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 apush
function on theFuturesUnordered
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 useTask::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
andsink::SinkFromErr
- Add
PartialEq
andEq
tompsc::SendError
- Reimplement
Shared
withspawn
instead ofUnparkEvent
0.1.12 - 2017-04-03
- Add
Stream::from_err
andSink::from_err
- Allow
SendError
to beClone
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 tostream::Iter
(with a reexport for the old name). - Add a
Sink::wait
method which returns an adapter to use an arbitrarySink
synchronously. - A
Stream::concat
method was added to concatenate a sequence of lists. - The
oneshot::Sender::complete
method was renamed tosend
and now returns aResult
indicating successful transmission of a message or not. Note that thecomplete
method still exists, it's just deprecated.
0.1.10 - 2017-01-30
- Add a new
unsync
module which mirrorssync
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
inUnboundedSender::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 aPoll
-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 onUnpark
- Optimize
send_all
andforward
to send as many items as possible before callingpoll_complete
. - Unify the return types of the
ok
,err
, andresult
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 onUnboundedSender
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 ofBiLock
or otherwiseArc
sharing. - All future combinators should be accessed through the
future
module, not the top-level of the crate. - The
Oneshot
andComplete
types are now replaced with thesync::oneshot
module. - Some old names like
collect
are deprecated in favor of more appropriately named versions likejoin_all
- The
finished
constructor is nowok
. - The
failed
constructor is nowerr
. - The
done
constructor is nowresult
.
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
tojoin_all
- Use a small vec in
Events
for improved clone performance - Add
Stream::select
for selecting items from two streams likemerge
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
, anddone
combinators toerr
,ok
, andresult
. - Add
Stream::forward
to send all items to a sink, likeSink::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
andStream::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 thestream::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!