The optimisations for Rust's iterators primarily come from the fact that iterators can trivially maintain Rust's safety properties (skipping runtime checks in the code, without an optimiser even being involved) and iterator-like constructs are easier for generic optimisation passes in LLVM to reason about.