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 컴파일러를 실험 가능한 수준으로 구현한 프로젝트다.
이 요약은 원문 이해를 돕기 위한 큐레이션입니다. 저작권은 원저작자에게 있으며, 정확한 내용과 맥락은 원문을 확인하세요.
요약 오류, 출처 표기 문제, 삭제 요청은 문의 · 건의로 알려주세요.