Ruby 인터프리터의 핵심은 스크립트 ‘읽기’와 ‘평가’이며, YARV는 바이트코드 생성 및 평가를 담당합니다. YARV는 기존 AST 직접 평가 방식 대신 스택 머신 기반 바이트코드 컴파일로 실행 효율을 높였습니다. ‘자동 코드 생성’은 YARV 개발의 주요 특징으로, VM 명령어 정의 파일을 통해 실행 코드 및 메타데이터 등이 자동 생성되어 개발 효율성과 최적화를 용이하게 합니다.
성능 최적화는 YARV의 주요 목표였으나, Ruby의 동적 특성(메서드 재정의, eval
등)은 최적화에 제약을 줍니다. Ruby는 메서드 호출이 많으므로 ‘메서드 호출’ 최적화가 중요하며, YARV는 메서드 캐싱, 특수화된 명령어(‘지연된 Proc 생성’ 포함) 등을 도입하여 성능을 크게 향상시켰습니다. 특히 경량 빌트인 메서드에 특수화된 명령어를 적용하여 초기 YARV 성능을 획기적으로 개선했습니다. 그러나 이러한 특수화된 명령어는 확장성 및 사용자 정의 코드 오버헤드 문제를 야기할 수 있으며, 메서드 인라이닝이나 블록 디스패치 최적화는 여전히 개선 여지가 있습니다. YARV는 인간이 읽기 쉬운 역어셈블 코드 제공, 바이너리 표현 지원, prism.rb
를 통한 Ruby 빌트인 메서드 작성 편의성 등 인터프리터 접근성도 높였습니다.