Zig: 모든 패키지 관리 기능을 컴파일러에서 빌드 시스템으로 이동
2 hours ago
1
- Zig는 build.zig와 빌드 시스템을 별도 프로세스로 분리한 흐름에 맞춰, 패키지 관리 로직을 컴파일러 실행 파일 밖의 maker 프로세스로 옮김
- zig build, zig fetch, zig init, zig libc가 maker 쪽으로 이동하면서 HTTP, TLS, Git, 압축, build.zig.zon 처리 코드가 소스 형태로 배포됨
- 이 구조에서는 컴파일러 재빌드 없이 패키지 관리 기능을 고칠 수 있고, maker가 ReleaseSafe로 컴파일되어 네트워킹 작업의 안전성 검사도 활성화됨
- 원래 목적은 build server protocol을 노출해 ZLS를 막고 있던 --build-runner 변경 문제를 푸는 것이며, 새 프로세스 트리에서는 maker가 configurer의 부모로 남아 설정 재실행을 더 안정적으로 처리할 수 있음
- 사용자 영향은 크지 않지만 Zig 실행 파일은 14.1MiB에서 13.5MiB로 4% 줄고, --maker-opt와 --zig-lib-dir는 각각 ZIG_DEBUG_MAKER, ZIG_LIB_DIR 환경 변수로 대체됨
패키지 관리 로직의 이동
- Zig는 사용자 build.zig 스크립트와 빌드 시스템 자체가 별도 프로세스로 분리된 뒤, 패키지 관리 로직도 빌드 시스템 쪽에 두는 구조로 바꿈
- maker 프로세스로 이동한 하위 명령은 다음과 같음
- zig build
- zig fetch
- zig init
- zig libc
컴파일러 실행 파일에서 빠진 코드
- 이전에는 컴파일러 실행 파일 안에 있던 큰 코드 영역들이 이제 소스 형태로 배포됨
- 패키지 가져오기 로직
- HTTP 클라이언트와 네트워킹
- TLS와 관련 암호화
- Git 프로토콜
- xz, gzip, zstd, flate, zip
- build.zig.zon 파일의 파싱, 검증, 기타 처리
- 이 기능들은 컴파일러를 다시 빌드하지 않고도 패치할 수 있어 사용자와 기여자가 더 쉽게 실험할 수 있음
- maker 실행 파일은 ReleaseSafe 모드로 컴파일되므로, 패키지 관리의 네트워킹 작업에서 안전성 검사가 켜짐
- 네트워킹과 파일 해싱에 쓰이는 암호화 코드는 호스트에서 사용 가능한 특수 CPU 명령을 활용할 수 있음
프로세스 구조와 build server
- 원래 동기는 build server protocol을 노출해 ZLS를 막고 있던 문제를 해소하는 것이었음
- 이전 구조에서는 zig build가 컴파일러와 패키지 관리자를 함께 담당하고, 그 아래 builder가 사용자 build.zig 로직과 빌드 시스템 구현을 담았음
- maker/configurer 분리 이후 구조는 다음과 같았음
- zig build: 컴파일러 + 패키지 관리자
- configurer: 사용자 build.zig 로직
- maker: 빌드 시스템
- 이 구조에서 오래 실행되는 zig build --watch는 build.zig나 관련 파일 변경을 감지하면 configurer를 다시 실행해야 했고, 이를 위해 maker가 종료되어 zig build가 패키지 관리 로직을 반복할 기회를 줘야 했음
- 새 구조에서는 zig build가 컴파일러만 맡고, 그 아래 maker가 빌드 시스템과 패키지 관리자를 담당하며, configurer는 maker의 자식 프로세스가 됨
- 설정을 다시 실행해야 할 때도 maker가 부모 프로세스로 계속 살아 있을 수 있음
- 예정된 build server에서는 서버 종료 후 클라이언트가 다시 연결하는 대신, 클라이언트에 설정 변경을 알리는 구조가 가능해짐
관찰 가능한 변경점
- 대부분 비호환 변경은 아니지만, 사용자가 볼 수 있는 차이가 있음
- Zig 실행 파일 바이너리 크기: LLVM 없는 ReleaseSmall 기준 14.1MiB에서 13.5MiB로 줄어 4% 감소
- --maker-opt 플래그는 ZIG_DEBUG_MAKER 환경 변수로 대체됨
- --zig-lib-dir 플래그는 ZIG_LIB_DIR 환경 변수로 대체됨
Zig 0.17.0 전 남은 차단 이슈
- 이 변경 묶음 이후 남은 주요 차단 이슈들이 Zig 0.17.0 태그 전까지의 핵심 작업임
- 7월에는 두 개의 콘퍼런스와 발표 준비가 있어, 이 작업들을 마무리하는 시점은 현실적으로 8월 초가 될 것으로 예상됨
- ZLS 팀의 Techatrix가 build server protocol 작업에 연락하고 협업했으며, 스폰서십을 찾고 있음
-
Homepage
-
개발자
- Zig: 모든 패키지 관리 기능을 컴파일러에서 빌드 시스템으로 이동