我们已将不稳定的 Generator
trait 重命名为 Coroutine
,并相应地调整了所有术语。如果你想查看所有 3800 行修改的代码,可以在 这里 找到 PR。
我们的 Generator
trait 实际上已经是协程了,所以这个改动早就应该进行了。所有使用 Generator
trait 的 nightly 用户现在必须更新他们的代码,以引用新的 feature gate 和 trait 名称。
有什么区别?
生成器只是编写 Iterator
实现的一种便捷方式。这意味着它是一个没有参数也没有返回类型的协程。相反,当它返回时,意味着迭代结束,并且 Iterator::next
方法返回 None
。
回归本源
此更改的直接动机是重新引入生成器,这次使用更简单(async
/await
风格)的语法来创建 Iterator
。有关此的一些讨论可以在 gen fn
rfc 中找到。
当然,如此大规模的更改如果缺少立即重新引入一个刚刚删除的名称的新概念的 PR 就不完整了,因此,你可以在这里看到 gen
代码块的 MVP,它的诊断非常奇怪,如果你过度使用它可能会导致 panic。