'언젠가 읽기' 컨텐츠는 논문이나 영문 컨텐츠 등 언젠가 읽으려고 즐겨찾기 하고선
읽지 않고 계속 미룰만한 컨텐츠를 읽고 요약하거나 소개합니다.
Rust의 겸손한 for 루프
THE HUMBLE FOR LOOP IN RUST
저자
Martijn Faassen
날짜
2024-12-11
태그
프로그래밍, Rust
개요
Rust는 반복자(iterators) 개념을 중심으로 훌륭한 함수형 프로그래밍 기능을 내장하고 있습니다. Rust의 성능과 저수준 제어에 중점을 둔 설계 덕분에 이러한 기능을 성능 저하 없이 사용할 수 있습니다. 그럼에도 불구하고, 간단한 for 루프를 사용하는 것이 더 나을 때가 있습니다. 많은 경우, for 루프는 높은 성능과 높은 가독성을 동시에 제공합니다. 이 글에서는 그 이유를 설명합니다.
for 루프와 성능
Rust에서 for 루프를 사용하는 예시는 자바스크립트나 파이썬과 유사합니다. 예를 들어, 리스트의 각 항목을 변환(transform)하여 새로운 벡터에 추가하는 과정은 다음과 같습니다:
Vec
는 Rust에서 확장 가능한 배열로, 자바스크립트의 배열이나 파이썬의 리스트와 유사합니다.- 단순한 for 루프는 좋은 성능을 보이지만, 초기 용량을 미리 설정하면 약 30% 더 빠를 수 있습니다.
with_capacity()
를 사용하면 벡터의 용량을 미리 지정하여 메모리 재할당을 피할 수 있습니다. 이는 반복적으로 메모리를 할당하는 비용을 줄여 성능을 향상시킵니다.
map 함수의 장점
Rust의 map()
함수는 원래 벡터를 반복자로 변환하고, 변환 작업을 내장한 새로운 반복자를 반환합니다. 이 반복자를 다시 벡터로 수집(collect)하면 실제 작업이 수행됩니다. map()
함수는 다음과 같은 장점을 가집니다:
- 가독성:
map()
은 선언적(declarative) 방식으로 코드를 작성할 수 있어 가독성이 높습니다. - 성능: 경우에 따라 for 루프보다 훨씬 빠르게 동작할 수 있습니다. 예를 들어, 10,000개의 정수를 처리할 때
map()
은 for 루프보다 6배 빠르게 동작할 수 있습니다. - 컴파일러 최적화:
map()
을 사용할 때 Rust 컴파일러는 할당을 피하고 원래 벡터를 재사용하거나 SIMD(단일 명령 다중 데이터) 최적화를 적용할 수 있습니다.
결론
Rust에서 for 루프와 map()
함수는 각각의 장단점이 있으며, 상황에 따라 적절히 선택할 필요가 있습니다. 단순한 for 루프는 높은 성능과 가독성을 제공하며, map()
함수는 더 선언적이고 때로는 더 높은 성능을 제공할 수 있습니다. Rust의 반복자 개념과 성능 최적화를 이해하면 더 효율적인 코드를 작성할 수 있습니다.
참고 자료
- 함수형 프로그래밍 기초
- Rust 성능 최적화
- 반복자 패턴 이해하기