타입 안전(type-safe)하고 확장 가능한 언어 Gleam(글림)이 최신 v1.19.0 버전에서 Erlang(얼랭) 가상 머신(VM) 컴파일 방식을 혁신적으로 변경했습니다. 기존에는 Erlang 소스코드를 생성한 후 Erlang 컴파일러가 이를 다시 처리하는 방식이었으나, 이제는 Erlang 컴파일러의 중간 표현인 Erlang 추상 형식(abstract forms)을 직접 생성하여 빌드 프로세스를 간소화했습니다.
이번 변화는 Giacomo Cavalieri(자코모 카발리에리)가 완전히 재작성한 Erlang 코드 생성기 덕분입니다. Erlang 추상 형식은 Erlang 컴파일러가 사용하는 메타데이터 주석이 달린 트리 형태로, 이진 인코딩(binary encoding)을 통해 직접 로드될 수 있어 Erlang 컴파일러의 전반부(front-half) 과정을 건너뛸 수 있습니다. 이로 인해 Gleam 프로젝트의 빌드 시간이 크게 단축되었으며, 런타임에서 제공되는 위치 메타데이터(location metadata)가 Gleam 원본 소스코드에 더 정확하게 일치하게 되어 크래시 보고서(crash reports)나 스택 트레이스(stacktraces)의 라인 번호 정확도가 향상되었습니다. 또한, 이는 향후 Erlang 디버거(debugger)인 edb와 같은 도구에서 Gleam에 대한 완전한 디버깅 지원을 가능하게 할 잠재력을 가집니다.
Gleam 개발팀은 이 새로운 접근 방식이 컴파일러 성능과 코드 품질을 개선하는 동시에, 프로젝트의 지속 가능성 측면에서 가장 효율적인 선택이라고 강조합니다. BEAM 바이트코드(bytecode)를 직접 생성하는 방식도 고려되었지만, BEAM 바이트코드가 Erlang VM 릴리스에 따라 계속 변화하므로 이를 지속적으로 추적하고 최적화를 유지하는 데 막대한 자원과 노력이 필요하다고 판단했습니다. 기업이나 학술 기관의 지원을 받는 언어와 달리 커뮤니티 프로젝트인 Gleam은 제한된 자원을 효율적으로 사용하여 장기적인 안정성을 확보하는 데 중점을 두었으며, Erlang 추상 형식으로의 컴파일이 현재로서는 비용-효율성 측면에서 최적의 균형점이라고 결론 내렸습니다.
