HyperAIHyperAI

Command Palette

Search for a command to run...

il y a un mois

Le devlog de Zig Programming Language

En mai 2026, le langage de programmation Zig a subi une refonte majeure de son système de construction, rendant le processus de compilation significativement plus rapide et plus efficace. Cette mise à jour sépare désormais le processus de configuration de celui d'exécution. Le code de configuration, défini dans les fichiers build.zig, est compilé en un petit exécutable qui génère un fichier de configuration binaire sérialisé. Le processus de construction principal, quant à lui, compile et exécute ce graphe de construction dans un mode optimisé. Cette architecture permet de réduire le temps d'exécution de commandes comme zig build -h de 150 millisecondes à environ 14 millisecondes. Elle offre également une meilleure gestion du cache, évitant de recompiler la logique de l'utilisateur à chaque fois que rien n'a changé et permettant aux outils tiers d'accéder plus facilement aux métadonnées de construction. Parallèlement à cette évolution, la version 0.16.0, attendue fin 2026, intègre une compilation incrémentielle fonctionnelle avec le backend LLVM. Bien que le temps de génération d'objets LLVM reste limité par les performances de ce dernier, la réduction du temps passé dans le compilateur Zig lui-même permet aux développeurs d'obtenir des messages d'erreur de compilation en quelques millisecondes plutôt qu'en plusieurs secondes. Cette fonctionnalité, désormais stabilisée, permet de gagner un temps considérable lors du développement itératif. Une refonte majeure de la résolution des types a également été mise en œuvre. Ce changement rend l'analyse des champs de type plus paresseuse : si un type n'est jamais initialisé, le compilateur n'a pas besoin d'analyser son contenu. Cela résout des problèmes courants où des erreurs de compilation étaient déclenchées inutilement par des champs marqués comme invalides dans des structures utilisées uniquement comme espaces de noms. De plus, les erreurs de boucle de dépendance sont désormais beaucoup plus claires, fournissant des détails précis sur la source du conflit, ce qui facilite grandement le débogage. Les implémentations d'entrée-sortie (E/S) de la bibliothèque standard ont également été enrichies avec le support de io_uring et de Grand Central Dispatch (GCD). Ces nouvelles options, basées sur la commutation de piles utilisateur, permettent aux applications de gérer les E/S de manière asynchrone et performante sur les systèmes Linux et macOS respectivement. Ces fonctionnalités expérimentales permettent de remplacer facilement les implémentations d'E/S sous-jacentes sans modifier le code de l'application elle-même, bien que des optimisations de performances soient encore à venir. La gestion des paquets a été améliorée par le stockage local des dépendances dans un dossier dédié du projet, favorisant le développement hors ligne et l'archivage, tout en conservant un cache global compressé pour le partage. Une nouvelle option de ligne de commande, --fork, permet de remplacer temporairement des packages par des versions locales ou des bifurcations, facilitant le débogage et la contribution sans altérer la configuration officielle du projet. Enfin, le projet poursuit sa stratégie de remplacement des bibliothèques C traditionnelles par des wrappers natifs en Zig. Cela vise à réduire la taille desbinaires, améliorer les vitesses de compilation et supprimer les dépendances inutiles vers des DLL Windows ou d'autres bibliothèques C. Cette approche permet une meilleure optimisation et un contrôle plus fin des ressources, tout en alignant le langage sur ses principes de simplicité et de prévisibilité.

Liens associés