피드로 돌아가기
Chuks v0.1.0: unboxing the hot path (and a 58x speedup hiding in `any`)
Dev.toDev.to
Infrastructure

Boxing 제거와 Inlining 최적화로 런타임 성능 최대 58배 향상

Chuks v0.1.0: unboxing the hot path (and a 58x speedup hiding in `any`)

Chukwuemeka Igbokwe2026년 6월 29일6advanced

Context

동적 타입 런타임의 특성상 모든 스택 값에 Boxing이 적용되어 단순 산술 연산 시에도 잦은 Heap 할당과 Garbage Collection 부하가 발생하는 구조적 한계 존재. 특히 Generic 함수 기반의 Array Read 방식이 패키지 경계에서 Inlining을 방해하여 Hot Path의 실행 속도를 저하시킨 상황.

Technical Solution

  • VM 내부에 int, float, bool 전용 Unboxed Stack 및 Local-variable Array를 병렬로 배치한 Typed Slots 구조 설계
  • 정적 타입 증명이 가능한 경로에 Typed Load/Store 및 Arithmetic Opcode를 적용하여 Heap 접근을 원천 차단
  • Redundant Box/Unbox 쌍을 제거하고 빈번한 시퀀스를 Super-instructions로 통합하는 Typed Peephole Pass 도입
  • Generic __idx_slice[T] helper를 타입별 Monomorphic Helper 함수로 분리하여 패키지 경계 간 Inlining 가능케 구현
  • any 타입 변수가 단일 구체 타입을 유지함을 정적으로 증명하여 Dynamic Dispatch 없이 Unboxed 상태로 연산 수행
  • Data Race 방지를 위해 Shared Mutating Object 호출 시 Lock 부재를 컴파일 타임에 탐지하는 정적 분석 체계 구축

- 반복문 내부의 임시 객체 생성 및 Boxing 발생 여부를 프로파일링하여 Unboxed 타입 전환 검토 - 성능 임계 경로(Hot Path)에서 Generic 함수가 Inlining을 방해하고 있지 않은지 패키지 경계 분석 - 동적 타입 언어 사용 시 `any` 혹은 `interface{}`와 같은 범용 타입의 실제 사용 패턴을 분석하여 구체 타입으로 최적화 가능성 타진

원문 읽기