Aaron Turon

Tech | Personal | Academic | Music | About

Project maintained by aturon Hosted on GitHub Pages — Theme by mattgraham

Futures 0.2 is here!

As of this morning, the futures crate version 0.2.0 is now available on crates.io! You can get the full low-down on the changes from my earlier post; here I’ll review the overall roadmap and what this release means.

Our goal is to ship async/await in Rust 2018 (roughly by mid-September), and to ship futures 1.0 this year. All told, this work will provide a stable and ergonomic foundation for async programming in Rust. But it will take a few steps to get there!

Today’s release

The 0.2.0 release today marks an important snapshot of our progress so far:

  • It completely revamps the task/executor system — the most hairy and confusing part of futures 0.1.
  • It sets up the crate to more easily allow for iteration.
  • It makes a large number of long-standing API tweaks that required breakage.

It has also been fully integrated into both Tokio and Hyper under experimental feature flags.

What’s ahead

Concurrent with the 0.2.0 release, we’ve posted two RFCs to rust-lang covering, respectively, the language and library additions needed to support async/await notation.

On the library side, the RFC proposes two significant changes to futures-core compared to the freshly-minted 0.2 release:

  • The use of pinned types to enable borrowing within futures.
  • Removing the associated Error types (and adjusting combinators accordingly).

It’s not currently possible to make these changes, because of rustc limitations, but these are expected to be addressed quite soon.

The overall plan is to:

  • Immediately begin work a 0.3 branch that fully matches the library RFC.
  • Publish the 0.3 version, initially as nightly-only, as soon as the rustc limitations around pinning are lifted.
  • Publish a 0.3.x version that works on the stable channel, as soon as pinning is stable.
  • Publish a 0.3.x version that simply re-exports the core APIs from std, once they are available.

In other words, the 0.3 release will be forward-compatible with the std version of futures-core APIs.

TL;DR: experimentation and feedback on this 0.2 snapshot is very welcome, but we anticipate a 0.3 release relatively soon. That release will set a stable foundation for futures-core, after which we can focus on iterating the rest of the stack to take full advantage of async/await!