22.1. 运行时考量
在许多使用场景中,迭代器可以避免分配中间数据结构,从而提升性能。
若不使用迭代器,将列表与数组配对时,必须先把其中一个转换成另一种类型并分配中间结构,然后再使用相应的 zip 函数。
使用迭代器即可避免这一中间结构。
消费迭代器时,应将所得计算视作单个循环,即使该迭代器本身是用组合子从多个底层迭代器构建的。 循环的一步可能会执行底层迭代器的多个步骤。 在许多情况下,Lean 编译器可以优化迭代器计算并消除中间开销,但并不保证总能如此。 若性能分析表明涉及多个数据源的紧密循环耗时显著,可能需要检查编译器的中间表示,以确认迭代器操作是否已融合。 尤其是,当中间表示中包含大量针对步骤的模式匹配时,这可能表示内联或特化失败。 此时可能需要手写尾递归函数,而不是使用高层接口。