22.1. 运行时注意事项
对于许多用例,使用迭代器可以通过避免分配中间数据结构来提高性能。
如果没有迭代器,则使用数组压缩列表需要首先将其中一个类型转换为另一种类型,分配中间结构,然后使用适当的 zip 函数。
使用迭代器,可以避免中间结构。
当使用迭代器时,生成的计算应该被视为单个循环,即使迭代器本身是使用来自多个底层迭代器的组合器构建的。 循环的一个步骤可能会执行底层迭代器的多个步骤。 在许多情况下,Lean 编译器可以优化迭代器计算,消除中间开销,但这并不能保证。 当分析显示涉及多个数据源的紧密循环花费大量时间时,可能有必要检查编译器的 IR 以查看迭代器的操作是否被融合。 特别是,如果 IR 在步骤中包含许多模式匹配,则可能是内联或专门化失败的标志。 如果是这种情况,可能需要手动编写尾递归函数,而不是使用更高级别的 API。