Spinel: Ruby AOT 네이티브 컴파일러
핵심 내용
Ruby를 네이티브 실행 파일로 바꾸는 AOT 컴파일러 Spinel이 공개됐다.
자세히 보기
Ruby 소스를 독립 실행형 네이티브 바이너리로 컴파일하는 AOT 컴파일러다. 전체 프로그램 타입 추론을 기반으로 최적화된 C 코드를 생성하며, 백엔드 자체도 Ruby로 작성돼 self-hosting 구조를 갖췄다.
파이프라인은 Ruby -> AST -> C source -> native binary 순서로 동작한다. 파서는 Prism(libprism)을 사용하고, C 바이너리와 CRuby+Prism gem 폴백이 같은 AST 출력을 만든다. require_relative는 파싱 시점에 인라인 처리된다.
벤치마크에서는 최신 CRuby miniruby 대비 기하평균 약 11.6x 빠르다고 제시했다. 계산 집약형 작업에서 성능 차이가 컸고, 예를 들면:
life86.7xackermann74.8xmandelbrot58.1xfib34.2xnqueens30.4x
실사용 성격의 테스트에서도 json_parse 10.1x, ao_render 8.0x, template engine 6.2x 개선을 보였다. 총 74개 테스트와 55개 벤치마크가 통과했다고 밝혔다.
지원 범위도 구체적이다. 클래스, mixin, block, 예외 처리, String/Array/Hash, 정규식, bigint, Fiber, I/O 등을 지원하며, 작은 immutable class를 value type으로 승격해 GC 부담을 줄인다. 문자열 결합 평탄화, 루프 길이 호이스팅, 상수 전파, bigint 자동 승격, 심볼 상수화 같은 최적화도 포함된다.
구조적으로는 spinel_codegen.rb가 컴파일러 백엔드, lib/sp_runtime.h가 런타임, lib/regexp/가 내장 regexp 엔진을 담당한다. 즉, Ruby 생태계에서 고성능 AOT 컴파일러를 실험 가능한 수준으로 구현한 프로젝트다.
이 한국어 요약은 AI가 자동으로 만들었습니다. 원문의 주장과 맥락은 원문에서 확인해 주세요. 저작권은 원저작자에게 있습니다.