AI Briefing

빠른 동적 언어 인터프리터를 만드는 방법

·2026.04.22 12:17

핵심 내용

AST 인터프리터를 21단계 최적화로 CPython 대비 1.9배까지 끌어올린 사례.

자세히 보기

Zef라는 동적 언어의 AST 직접 순회 인터프리터를 대상으로, JIT나 바이트코드 없이도 성능을 크게 끌어올리는 방법을 단계별로 정리한다.

초기 베이스라인은 CPython 3.10보다 35배, Lua 5.4.7보다 80배, QuickJS-ng 0.14.0보다 23배 느렸지만, 여러 최적화를 누적해 16.646배 가속했다. 여기에 미완성 Yolo-C++ 이식까지 포함하면 베이스라인 대비 66.962배 빨라졌고, CPython 3.10보다 1.889배 빠름을 기록했다.

핵심 개선은 다음과 같다.

  • 연산자와 RMW를 문자열 디스패치에서 분리해 직접 호출로 바꿈
  • IntObject 검사 경로를 줄여 isInt() 호출을 회피
  • 문자열 기반 조회를 Symbol 포인터 기반으로 바꿔 해싱과 비교 비용을 절감
  • 중요한 함수들을 인라인화할 수 있도록 valueinlines.h를 분리
  • Object, ClassObject, Context 구조를 재설계해 Storage/Offset 기반 접근으로 전환
  • 인터프리터 수준에서 inline cache 와 watchpoint 를 결합해 속성 접근과 메서드 호출을 특수화

실험은 Ubuntu 22.04.5, Intel Core Ultra 5 135U, 32GB RAM 환경에서 진행했고, 30회 무작위 실행 평균을 사용했다. 벤치마크는 ScriptBench1의 Richards, DeltaBlue, N-Body, Splay를 사용했다.

이 글의 요지는, 성숙한 VM 기술이 없어도 값 표현, 객체 모델, 이름 해석, 캐싱 구조를 잘 설계하면 AST 인터프리터도 상당히 빠르게 만들 수 있다는 것이다.

이 한국어 요약은 AI가 자동으로 만들었습니다. 원문의 주장과 맥락은 원문에서 확인해 주세요. 저작권은 원저작자에게 있습니다.

AI 처리 방식을 확인하거나, 요약 오류와 출처 표기 문제, 삭제 요청을 문의 · 건의로 알려주세요.