ZJIT의 주요 발전 사항
-
사이드 엑시트(Side-exits) 구현: JIT 코드 실행 중 예상치 못한 타입 변경이나 메서드 재정의가 발생할 경우, 안전하게 인터프리터로 제어를 넘길 수 있게 되어 더 복잡한 코드 실행이 가능해졌습니다.
-
확장된 최적화 범위: 정수 연산뿐만 아니라 인스턴스 변수 접근, 구조체 읽기/쓰기, 객체 할당 등 다양한 작업을 최적화하며, Shopify와 GitHub 같은 대규모 애플리케이션의 테스트를 통과하는 수준에 도달했습니다.
-
C 메서드 인라이닝: Integer
succ와 같은 주요 내장 C 메서드를 HIR(High-level IR) 수준에서 직접 처리하여 불필요한 호출 비용을 줄이고 타입 추론 효율을 높였습니다.
- 레지스터 할당 및 시각화: 대규모 함수 컴파일을 위한 레지스터 스필링 문제를 해결했으며, Iongraph 통합을 통해 최적화 단계를 시각적으로 분석할 수 있는 도구를 마련했습니다.
향후 로드맵
-
yield 및 super 호출 최적화와 객체 셰이프(Shape) 전이 시의 최적화를 계획 중입니다.
-
선형 스캔(Linear Scan) 기반의 레지스터 할당기 재작성을 통해 성능을 개선하고, 다형성(Polymorphic) 호출 최적화를 준비하고 있습니다.
-
VM 프레임 상태 업데이트를 지연시키는 ‘Deferred Frame Flushing’을 통해 실행 효율을 극대화할 예정입니다.