일간

Zig 0.17 — @bitCast 의미 변경, @cImport 제거, 빌드 시스템 분리

원문 Zig 릴리스 노트 ↗

Zig 0.17.0이 공개됐습니다. 1.0 전의 Zig는 매 릴리스가 호환을 깹니다. 이번 노트에서 실제로 코드를 고치게 만드는 것만 추립니다.

언어

@bitCast 의미 변경. 배열·벡터 타입에서 동작이 바뀝니다. 노트는 컴파일 오류 없이 기존 코드가 깨질 수 있다고 직접 경고합니다. extern struct와 extern union 사이의 캐스트는 금지됩니다. 바이너리 직렬화, SIMD 코드가 해당합니다.

배열 곱셈 a ** b 제거. @splat으로 대체합니다.

@backingInt / @fromBackingInt 추가. @intFromEnum, @enumFromInt는 deprecated입니다.

@cImport 제거. C 헤더를 끌어오던 빌트인이 언어에서 빠지고, translate-c가 외부 패키지로 나갔습니다. C 라이브러리를 쓰는 모든 프로젝트가 영향을 받습니다.

빌드 시스템

  • 설정(configure) 프로세스와 실행(make) 프로세스가 분리됐습니다.
  • b.build_root → b.root.
  • 여러 add*Arg 함수에 2 접미사 버전이 추가되고 기존 함수의 동작이 바뀌었습니다.
  • 빌드 러너 오버라이드 기능이 제거됐습니다.
  • Build Server Protocol 도입. 그 결과 ZLS 0.17.0과 호환되지 않습니다 — 에디터 지원이 따라올 때까지 기다려야 합니다.

백엔드와 타깃

자체 x86_64 백엔드의 Windows 지원을 완성해 기본값으로 켜는 것이 로드맵에 있고, aarch64 자체 백엔드는 링커 작업에 막혀 아직입니다. WebAssembly 자체 백엔드는 테스트 통과율 100%지만 디버그 정보가 없어 기본은 아닙니다. 타깃은 loongarch32, 게임 콘솔(Switch, GBA, PSX, Wii U), 초기 xtensa가 추가됐고 powerpc-linux 일부가 빠졌습니다.

성능

표준 라이브러리 테스트 빌드(-Osafe) 기준으로 wall time 29.4초 → 22.1초, 최대 메모리 2.24GB → 1.11GB를 보고했습니다. 캐시 히트는 5~10% 빨라졌다고 합니다.

글에 없는 것

릴리스 날짜가 노트에 없습니다. 1.0 시점 언급도 없습니다. @bitCast 변경이 정확히 어떤 코드에서 어떤 결과 차이를 내는지는 노트의 해당 절을 직접 읽어야 합니다.

실무에서 할 일

Zig를 직접 쓴다면 올리기 전에 @bitCast 사용처를 전부 찾아 배열·벡터가 걸리는지 보세요. 컴파일러가 잡아주지 않는 변경입니다. @cImport는 컴파일이 막히니 알아서 드러납니다. 간접적으로 쓴다면 — Bun, TigerBeetle, Ghostty의 요구 Zig 버전이 바뀔 때 CI 이미지를 같이 올리면 됩니다. 어느 쪽이든 Zig 버전은 고정해 두세요.

2026년 10월 3일에 올라온 글

그날 대시보드 →
  1. ·Apple, macOS 전체 디스크 접근을 더 어렵게 만든다 — AI 에이전트를 명시

댓글

불러오는 중…