L'auteur revient sur quatre mois d'utilisation de Zig, en détaillant les projets réalisés, les contraintes rencontrées et les mécanismes du langage qui le distinguent des alternatives comme Rust.
Contexte et projets réalisés
Le premier projet, snurl, vise à fournir une alternative à curl pour les protocoles du « smallnet » (Gemini, Finger, Gopher, Spartan). Le développement a été interrompu par l'absence de fonction de fuzzing dans la version 0.16.0, alors que le fichier main.zig généré par zig init le mentionne comme disponible. Deux programmes supplémentaires, un TUI de course de dactylographie et un simulateur n‑body avec évolution stellaire sous raylib, restent non publiés. L’auteur a également participé à un « Zig Day » à Seattle, où il a collaboré sur snurl et a discuté avec le créateur Andrew Kelley.
Gestion explicite de la mémoire et des entrées‑sorties
Chaque fonction Zig doit recevoir un paramètre d’allocation. L’auteur compare ce modèle à l’allocation implicite d’autres langages, notant que le passage explicite d’un allocator (arena, généraliste, FixedBufferAllocator, etc.) rend le comportement mémoire visible et évite les erreurs de contexte. De même, le paramètre IO obligatoire pour toute interaction avec le système d’exploitation fournit un point d’injection pour les tests : on peut substituer un objet IO qui simule des lectures, des écritures ou des échecs, ce qui simplifie la validation fonctionnelle.
Mécanismes de compilation et de construction
Le système de compilation « comptime » permet d’exécuter du code au moment de la compilation, combinant métaprogrammation et pré‑calcul. L’auteur souligne que cette approche évite les étapes de génération de code séparées. Le build system intégré, utilisé par des entreprises comme Uber pour des projets multilingues, accepte l’intégration d’outils externes sans les contraintes de Cargo. Le gestionnaire de dépendances suit une philosophie « avoid », limitant le nombre de dépendances directes à une ou deux et favorisant l’audit manuel.
Communauté et limites observées
Le texte mentionne anyzig, un outil qui sélectionne automatiquement la version de Zig (master ou 0.16.0) selon le répertoire. Sa portée est toutefois restreinte aux dossiers contenant build.zig.zon, ce qui empêche son usage pour des scripts ponctuels. Le manque de fuzzing fonctionnel constitue une limitation technique, même si le développeur espère une correction future. Enfin, la participation à des événements locaux renforce les échanges, mais l’article ne fournit pas de métriques d’adoption au‑delà de l’exemple Uber.