Zig 빌드 속도가 빨라지고 있음

1 month ago 12

  • Zig 0.15.1 출시로 인해 컴파일 속도가 전버전 대비 크게 개선됨
  • Ghostty 프로젝트에서 실제 빌드 시간을 측정한 결과, 전반적으로 구동 시간이 단축
  • 아직 LLVM을 일부 사용하고 있지만, 자체 백엔드 적용시 추가적인 속도 향상 기대감이 높음
  • 점증적 컴파일(incremental compilation)은 아직 완전히 구현되지 않았으나, 부분 빌드에서도 성능 이점이 나타남
  • 앞으로 더욱 빠른 빌드 환경과 향상된 개발 경험이 실현될 가능성이 높음

개요

Andrew Kelley의 발언인 "컴파일러가 너무 느려서 버그가 생김"에서 시작되어, Zig는 수년간 더 빠른 컴파일 시간을 목표로 다양한 구조적 개선 노력을 진행했음

  • Zig 팀은 LLVM 제거, 자체 코드 생성 백엔드 개발, 독자적인 링커 구축, 그리고 궁극적으로 점증적 컴파일 실현을 위해 노력해왔음
  • 이러한 장기적인 개발의 성과가 Zig 0.15.1 버전에서 가시적으로 드러나기 시작했고, 실제 프로젝트(Ghostty)에서 빌드 시간의 변화를 측정해 공유함

Build Script 컴파일 속도

  • Zig 0.14: 7초 167ms
  • Zig 0.15: 1초 702ms

build.zig 스크립트 자체의 빌드 시간이며, 이 시간은 신규 소스 빌드 환경에서 매번 부담하게 되는 초기 비용임

  • 빌드 스크립트 재컴파일 빈도는 낮게 유지되지만, 사용자가 처음 프로젝트를 직접 빌드하는 경험에는 직접적인 영향을 미침

전체 미캐시 바이너리 빌드(Ghostty)

  • Zig 0.14: 41초
  • Zig 0.15: 32초

빌드 스크립트 빌드 시간까지 포함한 전체 바이너리 빌드 타임임

  • Zig 0.15로 2초가량의 추가 속도 개선효과가 있으며, 실제 벽시계 시간 기준으로도 명확한 초기 차이가 있음
  • 아직 자체 x86_64 백엔드는 완전히 활용되지 못하고 있고, 대부분 LLVM을 계속 사용하는 상황임
  • 향후 Ghostty가 완전히 자체 백엔드로 빌드되면 25초 이하까지 시간 단축될 것으로 예측됨(기존 대비 절반 수준)

점증적 빌드(Ghostty 실행 파일)

  • Zig 0.14: 19초
  • Zig 0.15: 16초

의미 있는 한 줄의 변경(터미널 이뮤레이션 코드의 로그 호출 추가) 이후 다시 빌드하는데 소요되는 시간임

  • 빌드 스크립트와 의존성 그래프는 이미 캐시 상태인 상황에서 부분 빌드 임
  • 점증적 컴파일 기능이 아직 완벽하게 구현된 것은 아니나, 이미 성능 개선이 뚜렷하게 나타남
  • 사용 중인 LLVM을 제외하면 12초 가량까지 단축 가능성 있음
  • 향후 진정한 점증적 빌드가 구현되면, 밀리초 단위의 빌드 실현 가능성도 기대함

점증적 빌드(libghostty-vt)

  • Zig 0.14: 2초 884ms
  • Zig 0.15: 975ms

한 줄의 변경 이후 libghostty-vt만 부분적으로 다시 빌드한 시간 측정

  • libghostty-vt는 자체 x86_64 백엔드로 완전 빌드가 가능하므로, LLVM의 영향 없이 Zig의 개선점이 직접 반영됨
  • 점증적 컴파일이 아니어도 1초 미만의 빌드 시간 달성은 상당한 진전임
  • 개발자 워크플로에서 즉각적인 피드백 경험으로 효율성 향상
  • x86_64와 aarch64 백엔드가 점점 안정화되고 있으며, 수개월 내 Ghostty 전체에 적용될 가능성 있음

빌드 속도 개선의 현주소

  • Zig 0.15.1을 사용한 Ghostty 빌드는 모든 측정 구간에서 명확히 더 빨라진 현황임
  • 자체 백엔드와 점증적 컴파일이 아직 미완성임에도 현재의 성과 자체만으로도 충분히 인상적임
  • 앞으로 1~2년 내 더욱 혁신적인 속도 개선 결과가 기대되는 상황임
  • Zig를 선택한 것이 빌드 속도의 관점에서 합리적임을 실감하게 됨

Read Entire Article