std::future and futures-rs

Rust 的Future,有两个不同的来源:

而定义在futures-rs箱子中的 Future,是该类型的原始实现。(因为)要启用async/await语法,Future 的主要 trait 被转移到 Rust 的标准库中,成为了std::future::Future。从某种意义上说std::future::Future就可以看作是futures::future::Future

了解std::future::Futurefutures::future::Future两者之间区别,以及async-std榜上他俩的方法至关重要。在std::future::Future里面,其实并没有您作为一名用户,想要交互的内容 —— 除非通过在上面调用.awaitstd::future::Future的内部运作,对 implementing Future的人来说,大概率是最感兴趣的。不要混淆 —— 这点非常有用!以前定义在Future的大多数功能性代码,本身已经被移到一个称为FuturesExt trait。根据这些信息,您或许可以推断futures库的角色是,作为 core Rust 异步特性的扩展。

传承futures,async-std也会再出口 core std::future::Future类型。您可以自由地操作这项扩展,具体是将futures-preview添加到Cargo.toml,以及导入FuturesExt

Interfaces and Stability

async-std旨在成为一个稳定可靠的库,处于 Rust 标准库的水平。这也意味着,我们接口不依赖futures库。然而,我们很感激许多用户已经开始喜欢这futures-rs带来的便捷。因此,async-std为它的类型实现所有futures trait。

幸运的是,上面的方法给了你完全的灵活性。如果你非常关心稳定性,你可以照原样使用async-std。如果你更喜欢futures库接口,赶上。两种用法都是一流的。

async_std::future

我们认为,有一些支持的功能对 Futures 都很重要,不管是什么类型。这些可以在async_std::future模块,且有我们的稳定性保证。

Streams and Read/Write/Seek/BufRead traits

由于 Rust 编译器的局限性,这些目前仅实现在async_std,但不能由用户自己实现。