主要观点:
- 讨论了 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”类似但有差异。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。