Zig
En 2015, Andrew Kelley se lance dans une aventure folle qu'est la création d'un nouveau langage de programmation système. À cette époque, les développeurs disposent d'un arsenal conséquent avec C, C++, Rust ou Go. Pourtant, Kelley identifie un problème récurrent : chaque langage traîne ses propres limitations qui compliquent l'écriture de logiciels vraiment fiables.
Son raisonnement part d'une comparaison frappante. Dans l'aéronautique ou l'industrie des ascenseurs, les systèmes de sécurité se superposent pour rendre les accidents quasi impossibles. Le logiciel, lui, souffre encore d'une réputation de fragilité et d'imprévisibilité. Kelley veut changer cette donne avec Zig.
Le nouveau langage adopte une philosophie radicale : faire moins, mais mieux. Zig supprime le préprocesseur du C, cette mécanique jugée trop complexe et source d'erreurs. Cette décision pourrait paraître régressive, mais Kelley introduit d'autres mécanismes qui résolvent les mêmes problèmes de façon plus élégante.
La gestion de la mémoire dans Zig rompt avec les tendances actuelles. Pas de ramasse-miettes ici, contrairement à Java ou Python. Les interruptions imprévisibles du programme pour libérer la mémoire disparaissent. Zig mise sur un système d'« allocateurs » qui donne aux développeurs un contrôle fin sur la mémoire, sans la lourdeur du C traditionnel. Le développeur sait exactement quand et comment son programme utilise la mémoire.
Les erreurs, ce cauchemar de tout programmeur, bénéficient d'un traitement particulier. Fini les exceptions qui peuvent surgir n'importe où dans le code. Zig intègre les erreurs directement dans le type de retour des fonctions. Le compilateur force littéralement le développeur à traiter chaque erreur possible. Cette contrainte, pesante au premier abord, améliore considérablement la fiabilité du code final.
Le compilateur Zig cache la capacité d'exécution du code pendant la compilation, ce qui ouvre des possibilités de méta-programmation sans recourir aux macros complexes du C++. De nombreuses erreurs sont détectables par le développeur avant l'exécution et optimiser les performances en amont.
L'interopérabilité avec C représente un atout stratégique de Zig. Le langage ne se contente pas d'utiliser les bibliothèques C existantes, il fonctionne lui-même comme un compilateur C performant. Cette dualité facilite l'adoption progressive dans les projets existants. Un développeur a la possibilité de commencer par utiliser Zig comme simple compilateur C, puis migrer progressivement vers ses fonctionnalités avancées.
Le système de build intégré remplace des outils comme Make ou CMake par une solution unifiée. Plus besoin de jongler avec différents systèmes selon la plateforme : Zig compile de façon identique partout. Cette uniformisation simplifie drastiquement la vie des développeurs qui travaillent sur plusieurs systèmes.
Quelques projets d'envergure ont adopté Zig. Bun.js, cette alternative à Node.js qui fait parler d'elle, est développé avec ce langage. Son créateur, Jarred Sumner, explique ce choix par la simplicité d'apprentissage de Zig comparé à C++ ou Rust, tout en conservant des fonctionnalités modernes et une excellente sécurité en développement.
La communauté Zig grandit autour d'une documentation soignée et d'un écosystème qui s'étoffe sur GitHub. La fondation Zig Software, avec Loris Cro comme VP communauté, structure le développement et la promotion du langage. Cette organisation donne une légitimité au projet face aux géants établis.
Les différents modes de compilation de Zig méritent qu'on s'y arrête. En mode debug, le compilateur détecte automatiquement de nombreuses erreurs classiques, aidant le développeur à identifier les problèmes. En mode release, ces vérifications s'effacent pour libérer toute la puissance du processeur. Cette flexibilité répond aux besoins contradictoires du développement : sécurité pendant la création, performance en production.
Le chemin vers la version 1.0 est encore long. Cette échéance volontairement lointaine témoigne de la prudence des créateurs qui préfèrent stabiliser le langage plutôt que de précipiter une sortie. Malgré ce statut de développement, Zig tourne en production dans certains projets, preuve de sa maturité technique.
Zig ne prétend pas remplacer C du jour au lendemain. L'ambition est plus subtile : proposer une évolution moderne qui corrige les défauts historiques du C sans perdre ses qualités. Cette approche progressive rend l'adoption de Zig progressive par les développeurs, en commençant par l'utiliser comme compilateur C avant d'explorer ses innovations.
L'aventure Zig illustre une quête constante dans l'informatique : trouver l'équilibre parfait entre simplicité, sécurité et performance. En éliminant la complexité accidentelle tout en préservant le contrôle sur le matériel, ce langage trace une voie originale dans le paysage encombré des outils de développement système.