Abstract

Rust는 메모리와 동시성에 대한 안전성을 제공하지만, C보다 성능이 낮다는 문제가 제기된다. 본 글은 이러한 성능 저하의 원인이 Rust 자체가 아니라 언어의 특성을 충분히 활용하지 못한 구현에 있을 수 있음을 보인다. 나아가 Rust 코드를 언어의 특성에 맞는 효율적인 형태로 개선하는 자동화된 코드 정제 시스템의 필요성을 논의한다.

본문

Rust는 메모리 및 동시성 안전성을 보장하는 시스템 프로그래밍 언어로, 최근 기존 시스템을 재작성하기 위한 대안으로 주목받고 있다. 그러나 안전성을 보장하는 대신 성능이 저하된다는 부정적인 인식도 존재한다. Zhang 등의 연구는 여러 벤치마크에서 Rust가 C보다 평균 77%의 성능 차이를 보였다고 보고했다 1. 그렇다면 Rust는 태생적으로 C보다 느린 언어일까?

Rust의 성능 문제는 언어 자체보다 Rust에 어울리지 않는 구현에서 발생할 수 있다. Rust는 안전성을 보장하기 위해 소유권(ownership), 불변성(immutability), 빌림(borrowing)과 같은 언어적 제약을 제공한다. 그러나 C 코드를 Rust로 단순히 옮기면 이러한 제약을 충분히 활용하지 못할 가능성이 크다.

Zhang 등의 연구1에서 공개한 이분 탐색 벤치마크를 재현하고 개선한 사례는 Rust의 언어적 제약을 활용한 구현이 성능을 높일 수 있음을 보여준다. 재현 결과, 기존 Rust 구현은 C 구현보다 실행 시간이 약 33.2% 길었다. 반면 입력 배열이 수정되지 않음을 반영해 입력부를 불변 부분 배열(slice)로 구현하자, 실행 시간이 38.3% 감소해 오히려 C 구현보다도 빨라졌다. 이는 컴파일러가 값의 범위를 더 정확히 추론하고 중간값 계산의 불필요한 연산을 제거할 수 있었기 때문이다.

결국 Rust의 성능 병목은 언어의 제약을 제대로 활용하지 못한 개발 방식에서 발생한다. 많은 개발자는 Rust가 가진 제약을 활용한 최적화에 익숙하지 않다. 그러나 학습 비용과 개발 부담을 고려하면, 이를 개발자 개인의 숙련도에만 맡기기는 어렵다. 타 언어의 방식을 답습한 Rust 코드를 언어의 특성과 최적화 가능성을 살리는 형태로 자동 정제하는 시스템이 필요한 이유다.


  1. Yuchen Zhang, Yunhang Zhang, Georgios Portokalidis, and Jun Xu. Towards understanding the runtime performance of rust. In Proceedings of the 37th IEEE/ACM International Conference on Automated Software Engineering, ASE ’22, pages 1–6. ACM, October 2022. ↩︎ ↩︎