veilletech.fr
3 oct. Feed du jour
#10 ZIG Article

Zig 0.17 : @cImport disparaît, ZLS ne suit pas encore

La rupture la plus dangereuse est celle qui compile.

Zig 0.17.0 (5 mois, 206 contributeurs, 925 commits) sépare l'exécution de build.zig du processus qui construit, ce qui accélère zig build mais casse ZLS pour l'instant. La compilation incrémentale devient utilisable sur la plupart des projets x86_64-linux. @cImport est supprimé au profit du paquet translate-c, et la nouvelle sémantique de @bitCast peut casser du code sans erreur de compilation.

2 min de lectureavancévidéo 1:24
Partager
Sommaire7 sections
  1. Ce qui se passe
  2. Le build change de forme
  3. Incrémental, enfin pour la plupart
  4. Ce qui casse
  5. Chaîne d'outils
  6. Comment s'y prendre
  7. À retenir

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 :

Terminal
zig build -fincremental --watch

Le 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

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

  1. Si l'éditeur dépend de ZLS, rester en 0.16 pour le moment.
  2. Chercher les @bitCast qui portent sur des tableaux ou des vecteurs, et vérifier leur résultat par des tests.
  3. Remplacer @cImport par une dépendance à translate-c.

Source : Zig 0.17.0 Release Notes, ziglang.org, 2 octobre 2026.