- CPython의 테일 콜링(tail-calling) 인터프리터가 Windows x86-64 환경에서 기존 방식보다 약 15% 빠른 성능을 보임
- macOS AArch64(XCode Clang)에서도 약 5%의 성능 향상이 확인되었으며, Windows에서는 MSVC 2026의 실험적 기능을 활용
- pyperformance 벤치마크에서 대부분의 테스트가 속도 향상을 보였고, 일부는 최대 78%까지 개선
- 성능 향상의 주요 원인은 컴파일러 최적화 히유리스틱 리셋과 인라이닝 개선으로 분석됨
- Python 3.15 정식 릴리스 시, Visual Studio 2026 기반 빌드에서 기본 적용될 예정
테일 콜링 인터프리터의 성능 개선
- CPython의 테일 콜링 인터프리터가 기존의 switch-case 인터프리터보다 Windows x86-64에서 약 15% 빠른 것으로 측정됨
- pyperformance 기준, 지오메트릭 평균 15~16% 향상
- 일부 벤치마크는 최대 78% 속도 향상, 소수의 경우 60% 느려짐
- macOS AArch64(XCode Clang)에서는 약 5%의 성능 향상 확인
- 이 결과는 Python 3.15 개발 주기 중 변경이 되지 않는다는 전제하에 유효
인터프리터 구조 비교
- C 기반 인터프리터 구현 방식은 switch-case, computed goto, tail-call threaded 세 가지로 구분됨
- switch-case: 명령어별 분기 처리
- computed goto: GCC/Clang 확장 기능으로, 분기 주소로 직접 점프
- tail-call threaded: 각 바이트코드 핸들러를 함수로 분리하고, 다음 함수로 테일 콜
- 과거에는 C 컴파일러가 테일 콜 최적화를 보장하지 않아 스택 오버플로우 위험 존재
- Clang의 __attribute__((musttail))과 MSVC의 [[msvc::musttail]] 속성으로 강제 테일 콜이 가능해짐
Windows용 MSVC 2026 빌드 결과
- MSVC의 실험적 기능을 사용한 CPython 빌드에서 벤치마크 대부분이 속도 향상
- 예시 결과:
-
spectralnorm: 1.48배
-
nbody: 1.35배
-
bm_django_template: 1.18배
-
xdsl: 1.14배
- Python 3.15의 “What’s New” 문서에 공식 반영됨
- Visual Studio 2026(MSVC 18) 빌드에서 테일 콜링 인터프리터 사용 가능
- 순수 Python 라이브러리는 약 15%, 소규모 스크립트는 최대 40% 속도 향상
성능 향상의 원인
- 테일 콜링은 컴파일러의 최적화 히유리스틱을 초기화하여 더 효율적인 코드 생성을 유도
- 기존 CPython 인터프리터 루프는 약 12,000라인의 단일 함수로 구성되어 인라이닝 최적화 실패 빈번
- 컴파일러가 코드 크기 증가를 피하기 위해 인라이닝을 거부하는 사례 다수
- 테일 콜링 방식에서는 함수가 분리되어 단순 함수들이 인라인 처리 가능
- 예시로 PyStackRef_CLOSE_SPECIALIZED 같은 간단한 함수가 인라인됨
- PGO(프로파일 기반 최적화) 빌드에서도 동일한 현상 보고
빌드 및 사용 방법
- 현재는 소스 빌드만 가능
- Visual Studio 2026 환경에서 다음 명령으로 빌드
$env:PlatformToolset = "v145"
./PCbuild/build.bat --tail-call-interp -c Release -p x64 --pgo
- 향후 Python 3.15 개발이 안정화되면 공식 바이너리 배포 예정