std::future
and futures-rs
Rust 的Future
,有两个不同的来源:
- 首先是
std::future::Future
,来自 Rust 的标准库。 - 第二个是
futures::future::Future
,来自futures-rs 箱子。
而定义在futures-rs箱子中的 Future,是该类型的原始实现。(因为)要启用async/await
语法,Future 的主要 trait 被转移到 Rust 的标准库中,成为了std::future::Future
。从某种意义上说std::future::Future
就可以看作是futures::future::Future
。
了解std::future::Future
和futures::future::Future
两者之间区别,以及async-std
榜上他俩的方法至关重要。在std::future::Future
里面,其实并没有您作为一名用户,想要交互的内容 —— 除非通过在上面调用.await
。std::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
,但不能由用户自己实现。