Skip to content

Zig

Zig is a general-purpose programming language and toolchain for maintaining robust, optimal, and reusable software.

Uber가 Zig를 사용하는 방법

Uber는 zig cc (bazel-zig-cc)를 사용하여 C/C++ 코드를 컴파일

    • 현재는 Go Monorepo 에서만. C/C++ 툴체인 사용중인 다른 언어로도 확장 계획이 있음
    • glibc 버전 선택이 가능하며, macOS 크로스 컴파일 가능하기 때문
  • 하지만, Zig 언어 자체를 사용할 계획은 없음. 즉 Zig의 C 툴체인만 활용
  • Uber는 Zig 재단(ZSF)에 기부를 하고, 버그수정 우선순위 계약을 체결했음 ($52800)
  • zig cc 의 강점
    • 40MB 밖에 안되는 크기의 완전 밀폐형 C/C++ 컴파일러. 표준 CLang의 1/10 밖에 안됨
    • 명령줄 인수로 제공하는 glibc 버전으로 링크 가능
    • Host 와 Target이 디커플됨. 호스트 상관없이 linux-aarch64 와 darwin-x86_64 의 설정이 동일
    • musl과 링크하는 것은 그냥 또 다른 libc 버전을 선택하는 것과 같음 -target x86_64-linux-musl

Zig의 comptime이 하지 않는 일들

  • Zig의 comptime이 하지 않는 일들 | GeekNews
  • Zig의 comptime 기능은 매우 강력한 컴파일 타임 평가 기능을 제공하지만 의도적으로 제한적임
  • 컴파일 타임 코드 실행 시 호스트 정보에 접근 불가능, 크로스 컴파일에 적합한 설계임
  • 동적 코드 생성, DSL, RTTI, I/O 등은 지원하지 않음, 대신 명시적인 타입 기반 코드 특수화 사용
  • RTTI는 직접 구현 가능, 단 컴파일 타임에만 존재하는 타입 정보를 런타임에 사용할 수 있게 재구성 가능함
  • comptime으로 새 타입 생성 가능하지만 API 확장은 불가, 사용자 정의 메서드 추가는 불가능함

See also

Favorite site