Open
Description
Code
I tried this code:
use std::time::Instant;
fn main() {
let start = Instant::now();
(0..=1000)
.flat_map(|a| {
(0..=1000).flat_map(move |b| {
(0..=1000)
.filter(move |&c| a * a + b * b == c * c && a + b + c == 1000)
.map(move |c| (a, b, c))
})
})
.for_each(|(a, b, c)| {
println!("a: {} b: {} c: {}", a, b, c);
});
let duration = start.elapsed();
println!("{} seconds", duration.as_secs_f64());
}
I expected to see this happen: code behaves the same across compiler versions
Instead, this happened: code runs 80% slower when compiled with Rust 1.82+
Version it worked on
It most recently worked on: Rust 1.81
Version with regression
rustc --version --verbose
:
rustc 1.82.0 (f6e511eec 2024-10-15)
binary: rustc
commit-hash: f6e511eec7342f59a25f7c0534f1dbea00d01b14
commit-date: 2024-10-15
host: x86_64-pc-windows-msvc
release: 1.82.0
LLVM version: 19.1.1
More details in this post
https://internals.rust-lang.org/t/iterator-performance-regression-1-81-1-82/22473