迭代器和可遍历对象

主要观点:

  • 讨论了 Rust 中关于“iterator”定义的混淆,提出应区分“iterator”和“traversable”两类抽象。
  • 指出“AsyncIterator”的动机是创建能依次产出值且能暂停等待准备就绪的状态机,将其他遍历类抽象融入该特征设计会使其不适合目的。
  • 提及可想象异步版本的“ParallelIterator”,它是另一种遍历子类,与“AsyncIterator”不同,有类似组合子但签名略有差异。

关键信息:

  • 在之前帖子中提到 Rust 项目中对“AsyncIterator”的分类混淆,未同时认识到它是“迭代修改的 Future”。
  • 定义“Iterator”为随推进依次产出多个值的状态机,“Traversable”为能以任何方式遍历多个值的对象。
  • “internal iteration”是“traversal”的另一种形式,不是迭代。
  • “AsyncIterator”与“an iterator of futures”不同,将“async effect”应用于Iterator::next方法会导致设计不佳。

重要细节:

  • Yosh Wuyts 以ParallelIterator为例支持“effects generics”倡议。
  • Niko Matsakis 曾提议以内部迭代为AsyncIterator基础。
  • Iterator表示简单的状态机,而ParallelIterator是复杂并发调度基础设施。
  • ParallelIterator::map签名与Iterator的组合子略有不同,因其需考虑并发应用。
  • 添加AsyncIterator到 Rust 是有明确用途,不是简单添加“async”效果。
  • 异步版本的“ParallelIterator”是不同抽象,与“AsyncIterator”类似但有差异。
阅读 6
0 条评论