1.2.std::future 与 futures-rs
std::future
与futures-rs
Rust 中Future
可能指两种不同的类型:
- 第一种是指 Rust 标准库中的
std::future::Future
。 - 第二种是指 futures-rs crate 中的
futures::future::Future
。
futures-rs 中定义的 future 类型是标准库中 future 的原始实现。Rust 将核心的 Future trait 移入标准库中并改为std::future::Future
以实现async/await
语法。在某种意义上讲,std::future::Future
可以看作是futures::future::Future
的最小子集。
了解std::future::Future
和futures::future::Future
的区别,以及async-std
对他们采取的措施非常重要。std::future::Future
并非你用于与用户交互的东西,除非你调用它的.await
函数。std::future::Future
的内部工作方式对于实现Future
的人来说非常有吸引力,因为它非常有效。过去Future
中定义的大量功能已经被移至一个叫FuturesExt
的扩展 trait中。据此,你应该可以推断出futures
库是 Rust 核心异步功能的扩展。
与futures
相同,async-std
也重新导出了核心std::future::Future
类型。您可以通过将futures
加入您的Cargo.toml
中并导入FuturesExt
来使用它的扩展。
接口与稳定性
async-std
旨在成为像 Rust 标准库一样稳定可靠的库。这也意味着我们的接口并不依赖于futures
库。同时,async-std
的类型也实现了所有futures
库中的 traits,以提供许多用户喜爱的futures-rs
库带来的便利。
幸运的是,上述的方法为您提供了充分的灵活性。如果您注重稳定性,您可以只使用async-std
库。如果您更喜欢futures
库的接口,您可以引入它。这两种用法都没有问题。
async_std::future
您可以在async_std::future
模块中找到与处理各种 futures 相关的重要支持函数,我们同样保证它们的稳定性。
Streams 和 Read/Write/Seek/BufRead traits
由于 Rust 编译器的限制,它们只能在async_std
中实现,而不可以由用户自己实现。
原文链接:book.async.rs/
本译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。