Zig v0.17.0

3 hours ago 3

빌드 시스템을 재설계해 빌드 구성과 실행을 별도 프로세스로 분리하고, IDE 등 외부 도구가 빌드 그래프를 조회하고 제어하는 Build Server Protocol을 도입함 증분 컴파일과 새 ELF 링커 개선으로 대부분의 x86_64-linux 프로젝트에서 zig build -fincremental --watch를 이용한 증분 재빌드가 가능해짐 @bitCast의 배열/벡터 변환 의미가 변경되어 컴파일 오류 없이 기존 코드의 동작이 달라질 수 있으며, @cImport 제거 등 언어와 표준 라이브러리의 호환성 변경도 포함됨 SafeAllocator가 DebugAllocator를 대체하며 누수, 이중 해제, 잘못된 할당 연산 탐지를 강화함 빌드 프로세스 분리로 ZLS가 0.17.0에서 동작하지 않는 호환성 문제가 있으며, Zig와 ZLS 팀은 Build Server Protocol을 확장해 기능을 복구하는 작업을 진행 중임 빌드 구성과 실행 분리 Zig 0.17.0에는 5개월간 206명이 기여한 925개 커밋이 반영됨 zig build는 build.zig를 실행하는 구성 프로세스(configurer) 와 패키지 관리 및 빌드 그래프 실행을 담당하는 실행 프로세스(maker) 를 별도 실행 파일로 분리함 maker는 build.zig 수정의 영향을 받지 않아 Zig 설치 후 최초 한 번만 빌드하면 됨 maker에 최적화를 적용하고, 명령행 옵션에 따라 구성 로직 실행을 생략할 수 있음 구성 정보는 외부 도구도 읽을 수 있는 바이너리 형식으로 직렬화하며, --print-configuration으로 ZON 출력을 얻을 수 있음 빌드 러너 교체 기능은 제거되고, 외부 도구 연동은 Build Server Protocol이 담당함 --listen=-으로 빌드 그래프의 구성 정보, 옵션과 의존성 조회, 단계 시작/종료 및 오류/생성 파일 알림, 특정 단계 실행 요청을 지원함 노출된 모듈 이름 등 일부 정보는 아직 제공하지 않으며, 이 변경으로 ZLS와의 호환성이 깨짐 향후 Zig 자체 도구도 프로토콜 클라이언트로 전환하고, 컴파일러 서버 프로토콜을 연결해 타입 정보와 리팩터링 기능을 제공할 계획임 캐시와 패키지 관리 변경 캐시 시스템은 디렉터리 항목 추가/삭제/이름 변경을 추적하고, 내용 외에 크기/inode/수정 시각 변화도 캐시 무효화 조건으로 삼는 메타데이터 모드를 지원함 바이너리 형식으로 바꿔 캐시 파일 크기가 약 25%...

Read Entire Article