Rust 程序设计语言 简体中文版 1.85.0出错的,特别是之后增加了更多功 能和状态的时候。相反,Rust 编译器自动创建并管理异步代码的状态机数据结构。如果你感 兴趣的话:是的,正常的借用和所有权也全部适用于这些数据结构。幸运的是,编译器也会为 我们处理这些检查,并提供友好的错误信息。本章稍后会讲解一些相关内容! 最终需要某个组件来执行状态机,而这个组件就是运行时。(这也是为什么在了解运行时的时 候,你可能会看到 executors 这个词:executor 是运行时中负责执行异步代码的部分。) 现在我们能够理解之前示例 17-3 中为何编译器阻止我们将 main 本身标记为异步函数了。如果 main 是一个异步函数,需要有其它组件来管理 main future 返回的状态机,但是 main 是程序 的入口点!为此我们在 main 函数中调用 trpl::run,它设置了一个运行时并运行 async 块返 回的 future 直到其完成为止。 注意:一些运行时提供了相关的宏,所以你 回忆一下本章之前 future 中一系列的 await point 被编译为一个状态机,而编译器确保这个状 态机遵守 Rust 在安全方面的所有常规规则,包括借用和所有权。为了使其正常工作,Rust 检 查在一个 await point 和另一个 await point 之间或到异步代码块结尾之间什么数据是需要的。 编译器接着在生成的状态机中创建一个相应的变体。每一个变体获得其在源码中对应片段所用 到的数据的0 码力 | 562 页 | 3.23 MB | 24 天前3
共 1 条
- 1













