컴파일러를 이긴 인터프리터, 어셈블리로 10-20% 더 빠르게

Beating the Compiler

컴파일러가 인터프리터 코드를 잘 생성하지 못한다는 소문이 있다. Matt Keeter는 Uxn CPU용 인터프리터를 Rust로 작성한 뒤 어셈블리로 다시 구현했다. 핵심은 모든 상태를 레지스터에 저장하고, 간접 스레딩(threaded code)으로 디스패치 루프를 제거한 것. 그 결과 기존 참조 구현보다 10-20% 빠른 성능을 얻었다. 어셈블리 최적화가 여전히 유효함을 보여주는 사례다.

컴파일러는 인터프리터를 위한 코드 생성에 서툴고, 어셈블리로 인터프리터를 작성하면 컴파일러를 능가할 수 있다.

이 날의 다른 글

2026-10-05