Présentation du cycle de développement

La version 0.17.0 de Zig résulte de cinq mois d’efforts collectifs, avec 206 contributeurs et 925 commits. Ce volume de contributions a permis de réviser en profondeur le système de construction, notamment l’introduction du Build Server Protocol qui sépare le processus de configuration du processus de construction. Cette séparation vise à réduire les temps d’attente lors de builds parallèles et à faciliter l’intégration de caches distants.

Refonte du système de build

Le nouveau modèle introduit un processus « maker » dédié à la génération du graphe de dépendances, tandis que le « configurer » gère les paramètres d’environnement. Le cache a été repensé pour supporter la poisoning de configuration, évitant ainsi la réutilisation de caches corrompus après des changements de flags. Parmi les ajouts notables, le flag --complexity permet d’afficher la complexité du graphe de build, facilitant le diagnostic des goulots d’étranglement. Exemple d’utilisation :

zig build --complexity

Ces changements s’accompagnent d’une suppression de la capacité à « override build runner », renforçant la cohérence du processus de compilation.

Améliorations du linker ELF et compilation incrémentale

Le nouveau linker ELF, développé en interne, offre une prise en charge élargie des formats ELF et COFF. Il a notamment permis d’obtenir un support fonctionnel pour les cibles sparc64‑linux, auparavant limité. Cette avancée rend possible la compilation incrémentale sur les plateformes x86_64‑linux, un objectif majeur du cycle. Le linker améliore également la gestion des symboles pour les ABI ILP32 (x32, N32), permettant d’utiliser le jeu d’instructions 64 bits avec des pointeurs 32 bits, ce qui réduit la consommation mémoire tout en conservant les performances du pipeline.

Extension du support cible et ajustements ABI

La version 0.17.0 ajoute la prise en charge native de loongarch32‑linux‑gnu, de consoles de jeu (aarch64‑switch, arm‑gba, mipsel‑psx, powerpc‑wiiu) et d’une première implémentation expérimentale pour xtensa‑linux. Le standard library a été porté sur les ABI x32 et N32, ainsi que sur plusieurs cibles « no‑libc » (microblaze, sh, sparc). En parallèle, le support de powerpc‑linux‑gnueabi[hf] a été abandonné, car la glibc ne fournit que le format « double‑double » pour le long double, incompatible avec la politique de Zig qui impose -mabi=ieeelongdouble. Le modèle de détection du CPU natif a été enrichi, avec des baselines ajustées pour des architectures comme aarch64‑haiku (cortex_a55) ou powerpc‑netbsd (750).