Sortie de Zig 0.16.0
(ziglang.org)Publié le 14 avril 2026. Cette sortie est le fruit de 1 183 commits réalisés sur 8 mois par 244 contributeurs.
I/O comme interface — le cœur de cette version
C’est le plus grand changement de cette version. Presque tout ce qui peut bloquer, comme le système de fichiers, le réseau, les timers ou la synchronisation, a été regroupé dans la nouvelle interface std.Io. Tout comme l’allocation mémoire nécessite un Allocator, le code qui utilise des E/S doit désormais recevoir une instance de Io. Cela permet de créer des packages réutilisables quel que soit le modèle de concurrence, et de gérer correctement les event loops au niveau du langage.
Il existe trois implémentations :
Io.Threaded— implémentation complète basée sur les threads. Elle prend aussi en charge la cancellation, et conserve le même comportement lors de la migration depuis 0.15.xIo.Evented— implémentation expérimentale basée sur le user-space stack switching (green threads)Io.Uring— implémentation PoC basée surio_uringsous Linux
Compilateur
- La compilation incrémentale fonctionne aussi avec le backend LLVM — en cas d’erreur de compilation, l’étape LLVM Emit Object est ignorée, ce qui permet de voir les erreurs beaucoup plus vite
- La résolution de types (Type Resolution) a été entièrement repensée — le graphe de dépendances interne est passé d’une structure cyclique à un DAG. Les types utilisés uniquement comme espaces de noms n’entraînent plus d’analyse inutile, ce qui réduit aussi la taille des binaires. Les messages d’erreur liés aux boucles de dépendances montrent également bien mieux l’origine du problème
- Backend aarch64 — le développement avance activement avec pour objectif d’en faire la valeur par défaut en mode Debug
- Le fuzzer intégré a gagné en puissance — ajout du fuzzing multiprocessus basé sur AST Smith, d’un mode infini (Infinite Mode) et d’une fonction de crash dump
Changements du langage (Breaking Changes)
Voici les changements qui nécessitent une migration :
@cImporta été déplacé vers le système de build- Le builtin
@Typea disparu — remplacé par des builtins distincts selon le type - Lazy Field Analysis a été introduite — les types utilisés uniquement comme espaces de noms ne font pas l’objet d’une analyse des champs
- Il n’est plus possible de mettre des pointeurs dans des
packed union/struct - De nombreuses API liées à
posixetos.windowsont été supprimées
Bibliothèque standard
heap.ArenaAllocatorest désormais thread-safe et lock-free, et leheap.ThreadSafeAllocator a été supprimé- La compression Deflate a été ajoutée, et l’API de décompression a aussi été simplifiée
std.cryptoajoute AES-SIV, AES-GCM-SIV, Ascon-AEAD et Ascon-HashThread.Pool,GenericReader/AnyReader/FixedBufferStreamont été supprimés- Le réseau sous Windows fonctionne désormais sans
ws2_32.dll, et la migration vers NtDll est terminée
Mise à jour de la toolchain
Passage à LLVM 21, musl 1.2.5, glibc 2.43, en-têtes Linux 6.19, en-têtes macOS 26.4 et libc FreeBSD 15.0.
Orientation de la prochaine version (0.17.0)
Les principaux objectifs sont la stabilisation de l’async I/O, le passage du backend aarch64 comme valeur par défaut en mode Debug, la suppression de la dépendance à LLD, et l’implémentation d’un linker prenant en charge la compilation incrémentale.
Aucun commentaire pour le moment.