借助于百度翻译完成的,如有错误或更好的翻译请留言
1. 介绍
这本书是async-std的高级文档,也是在Rust中学习异步编程的一种方法。因此,它将重点放在async-std的api和它提供给您的任务模型上。
请注意,Rust项目提供了自己的关于异步编程的书,称为“Rust中的异步编程(https://rust-lang.github.io/async-book/)”,我们强烈建议与本书一起阅读,因为它提供了一个不同的、更广泛的主题视图。
1.1 欢迎使用async-std
async std及其支持库使您在异步编程中的生活更轻松。它为下游库和应用程序提供了基本实现。这个名称反映了这个库的方法:它尽可能地接近Rust主标准库,用异步对应项替换所有组件。
async-std为所有重要的原语提供了接口:文件系统操作、网络操作和并发基础(如计时器)。它还公开了与Rust标准库中的线程模块类似的模型中的任务。但它不仅包括I/O原语,
还包括异步/等待兼容的原语版本,如互斥锁。
1.2 标准库中std::future与第三方库futures-rs
1.2.1 Rust有两个定义的Future类型:
第一个是std::future::Future,Rust标准库中的future。
第二个是futures::future::Future,在第三方库future-rs定义的future。
在第三方库futures-rs的库中定义的future是该类型的原始实现。
为了启用async/await语法,核心Future特性被移到Rust的标准库中,并成为std::future::Future。
在某种意义上,std::future::Future可以看作futures::future::Future的最小子集。
理解std::future::Future和futures::future::Future之间的区别以及async-std对它们采取的方法是非常重要的。
就其本身而言,std::future::Future并不是你想作为一个用户与之交互的东西,除了通过调用.await。
需要实现future的需要关注std::future::Future的内部工作原理。
别误会,这很有用!过去定义在Future本身上的大部分功能已经转移到一个扩展特性FuturesExt。
从这些信息中,您可以推断futures库充当了核心Rust异步特性的扩展。
在与futures相同的传统中,async-std重新导出核心std::future::Future类型。通过将FuturesExt添加到Cargo.toml并导入FuturesExt,您可以主动选择FuturesExt提供的扩展。
1.2.2 接口和稳定性
async-std的目标是在Rust标准库的层次上成为一个稳定可靠的库。这也意味着我们的接口不依赖于futures库。然而,我们意识到许多用户已经开始喜欢futures-rs带来的便利。
因此,async-std实现了其类型的所有futures特性,实现放在了async_std::future模块中。
幸运的是,上面的介绍的方法给了你完全的灵活性。
如果你非常关心稳定性,你可以直接使用async-std。
如果您喜欢futures库接口,也可以将它们添加进来使用。两种用法都是可以的。
我们认为对于处理任何类型的futures都很重要一些支持方法函数实现。这些都可以在async_std::future模块中找到,并在我们的稳定性保证中涵盖。
1.2.3 Streams and Read/Write/Seek/BufRead traits
由于Rust编译器的局限性,上面的traits目前只能在async_std中实现的,不能由用户自己去实现。
1.3 稳定性和语义化版本介绍(Stability and SemVer)
async-std遵循https://semver.org/标准,对于SemVer可以参考短乎的一篇文章https://www.jianshu.com/p/a7490344044f。
In short: we are versioning our software as MAJOR.MINOR.PATCH. We increase the:
简而言之:我们的软件版本是MAJOR.MINOR.PATCH。我们增加:
主版本号[MAJOR].次版本号[MINOR].修订号[PATCH],版本号递增规则如下:
主版本号:当做了不兼容的 API 修改,
次版本号:当做了向下兼容的功能性新增,
修订号:当做了向下兼容的问题修正。
主要版本当有不兼容的API更改时,
当我们以向后兼容的方式引入功能时
修正向后兼容错误时的补丁版本
我们将提供主要版本之间的迁移文档。
1.3.1 后期规划
async-std使用自己实现的以下概念:Read/Write/Seek/BufRead/Stream
为了与rust的软件生态更好的集成,实现这些traits的所有类型都在futures-rs库中实现了相应的接口的。请注意,我们的SemVer保证不扩展到这些接口的使用。我们希望这些将被保守地更新和同步。
1.3.2 最低版本策略
当前的暂定策略是,使用此板条箱所需的最低Rust版本可以在小版本更新中增加。例如,如果async std 1.0需要Rust 1.37.0,那么所有z值的async std 1.0.z也需要Rust 1.37.0或更高版本。但是,y>0的async std 1.y可能需要更新的Rust最低版本。
In general, this crate will be conservative with respect to the minimum supported version of Rust. With async/await being a new feature though, we will track changes in a measured pace initially.
一般情况下,该板条箱对于最小支撑型的铁锈是保守的。尽管async/await是一个新特性,但我们将在开始时跟踪测量速度的变化。
1.3.3 安全补丁
安全补丁将应用于此库所有支持的主要修订版中的所有次要分支。这项政策将来可能会改变,在这种情况下,我们至少提前3个月发出通知。
1.3.4 Credits
此原则基于BurntSushi的regex库。