Ce qui se passe
Zig 0.17.0 est sorti après cinq mois de travail : 925 commits de 206 contributeurs. Le cycle devait être court ; il a fini par refondre le système de build et faire mûrir le nouvel éditeur de liens ELF.
Le build change de forme
zig build exécute désormais le code de build.zig dans un exécutable
distinct de celui qui gère les paquets et exécute le graphe de build. Le
second, compilé une seule fois avec optimisations, n'est plus reconstruit
quand on modifie build.zig, et l'étape de configuration peut parfois être
sautée.
Le prix : ZLS, le serveur de langage de Zig, ne fonctionne pas avec 0.17.0.
Les équipes de Zig et de ZLS y travaillent, via le nouveau Build Server
Protocol (zig build --listen=-), qui expose aux outils le graphe complet,
les événements de chaque étape et la possibilité d'en demander une. Surcharger
le build runner, comme le faisaient certains outils, n'est plus possible.
Le cache passe à un format binaire environ 25 % plus compact, avec des
correspondances 5 à 10 % plus rapides, une sous-commande zig cache-cat et
l'explication des échecs de cache.
Incrémental, enfin pour la plupart
Sur x86_64-linux, la plupart des projets peuvent maintenant profiter de la
compilation incrémentale :
zig build -fincremental --watchLe build surveille les sources et ne recompile que ce qui a changé. Le support
sans --watch, un éditeur de liens Mach-O et le backend aarch64 sont annoncés
pour la suite.
Ce qui casse
@cImportest supprimé (déprécié depuis 0.16). La traduction du C passe par le paquet officieltranslate-c, et l'étapestd.Build.Step.TranslateCest elle-même dépréciée :Terminal zig fetch --save git+https://codeberg.org/ziglang/translate-c@bitCastchange de sens pour les tableaux et les vecteurs : il réinterprète désormais la représentation logique des bits, de façon indépendante de l'endianness. L'équipe prévient que des programmes peuvent changer de comportement sans erreur de compilation. Les casts depuis unextern structou uneextern unionsont refusés : passer par@ptrCast.a ** b(multiplication de tableaux) disparaît au profit de@splat.void{}devient{}; la captureerrdefer |err|et le typei0sont supprimés.powerpc-linux-gnueabi[hf]etpowerpc64-linux-gnune sont plus supportés.
Chaîne d'outils
LLVM 22.1.8 (Clang pour zig cc), glibc 2.44, musl 1.2.5, en-têtes Linux 7.2
et macOS 27.0. La vectorisation des boucles reste désactivée pour contourner un
bug de LLVM ; elle reviendra avec LLVM 23 dans Zig 0.18.0.
Comment s'y prendre
- Si l'éditeur dépend de ZLS, rester en 0.16 pour le moment.
- Chercher les
@bitCastqui portent sur des tableaux ou des vecteurs, et vérifier leur résultat par des tests. - Remplacer
@cImportpar une dépendance àtranslate-c.
Source : Zig 0.17.0 Release Notes, ziglang.org, 2 octobre 2026.