컴파일러에서 iter().map().sum()
및 iter().fold()
에 대해 동일한 코드를 생성합니까? 결국 같은 목표를 달성하지만 첫 코드는 map
에 대해 한 번, sum
에 대해 두 번 반복됩니다.iter(). map(). sum()`iter(). fold()`만큼 빠름?
다음은 예입니다. 어느 버전이 total
에서 빠를까요?
pub fn square(s: u32) -> u64 {
match s {
s @ 1...64 => 2u64.pow(s - 1),
_ => panic!("Square must be between 1 and 64")
}
}
pub fn total() -> u64 {
// A fold
(0..64).fold(0u64, |r, s| r + square(s + 1))
// or a map
(1..64).map(square).sum()
}
조립품을 보거나이를 벤치마킹하는 데 유용한 도구는 무엇입니까?
잠깐, 반복한다는 말은 무엇입니까? * 두 번 반복 하시겠습니까? –
@MatthieuM. 일반적인 오해. 예를 들어, Ruby와 같은 언어는 '지도'의 결과로 전체 '배열'을 생성합니다. 따라서 각각의 연결된'map' 호출은 새로운 컨테이너를 반복해야합니다. 루비에는 "게으른"반복자가 있지만 일반적이지 않습니다. – Shepmaster
@Shepmaster : 그건 내가 두려워하는 것입니다. –