Rust 동적 언어 인터프리터, 64비트 값 표현으로 17% 성능 향상

Key Point
메모리 구조 최적화만으로 메모리 낭비를 50% 줄이면서 오히려 성능을 높인 저수준 인터프리터 튜닝 기법이 실제로 작동하는 방식을 보여준다.
핵심 요약
- Plush 언어 인터프리터의 Value 타입을 Rust 태그 열거형(16바이트)에서 64비트 단일 워드로 변경했다.
- 메모리 정렬로 인한 낭비를 제거하고 저비트 태깅 기법을 사용해 각 값을 64비트 이내로 압축했다.
- 힙 객체 주소는 8바이트 정렬되어 최하위 3비트가 항상 0이고, 정수는 최하위 2비트를 차용해 태그를 내장했다.
- Fixnum(62비트 정수), Flonum(부동소수점), Immediate(nil, true, false, 함수 ID 등), 두 종류의 포인터를 인코딩한다.
- 문자열 구조 비교와 같은 기능을 위해 포인터 두 종류를 구분해 동등성 비교를 최적화했다.
- 추가 비트 연산이 필요했지만 CPU 캐시 효율과 메모리 대역폭 개선으로 종합 성능이 17% 향상되었다.