Ce qui se passe
Sept ans de Rust, surtout en open source, avec un penchant assumé pour le côté fonctionnel du langage. Puis l'envie de mesurer Zig, candidat sérieux à la succession du C.
Le protocole est ce qui rend ce retour intéressant : plutôt qu'un projet jouet, l'auteur a réimplémenté quelque chose qu'il avait déjà écrit en Rust. JSONPath, un langage de requête pour JSON spécifié par la RFC 9535. La version Rust existait déjà ; il s'agissait d'en produire l'équivalent en Zig. Comparaison à périmètre constant, par la même personne.
Il pose lui-même la réserve d'usage : son expérience de Zig commence avec ce projet, et certains de ses choix sont dictés par des habitudes venues de Rust plutôt que par l'idiome Zig.
Ce qui l'a surpris
L'outillage, avant le langage. Habitué aux environnements JetBrains, il découvre que Zig n'offre guère plus que la coloration syntaxique et une autocomplétion basique. Peu surprenant, mais cela l'a ramené à la ligne de commande.
C'est là que le récit bascule : ce qu'il prenait pour un handicap est devenu l'un
des aspects les plus intéressants de l'expérience. Le fichier build.zig gère
l'essentiel avec une simplicité qu'il qualifie de rafraîchissante une fois les
règles acceptées — lancer tous les tests, en filtrer un seul, activer un mode
débogage, exécuter la suite de conformité. L'expérience a même déclenché sa
migration d'un environnement complet vers un éditeur en terminal.
La structure plate
C'est l'observation la plus transposable.
En Rust, comme dans la plupart des langages, il passait du temps à chercher l'équilibre entre taille des fichiers et profondeur des dossiers. Zig autorise l'imbrication, mais ne l'encourage pas — c'est le tempérament d'un langage système, comme le C. Imbriquer introduit une friction d'import, et la question devient : qu'est-ce qu'on y gagne réellement ?
En théorie, une meilleure lisibilité. En pratique, regrouper les choses liées
dans un fichier plus gros permet de naviguer par sections, et il y a un vrai
bénéfice à tout avoir au même endroit. Quand un modèle a besoin d'un compagnon,
il crée un fichier model_<compagnon> à côté, et passe à autre chose.
Il ne prétend pas que cela passe à l'échelle indéfiniment : au-delà d'une certaine taille, une hiérarchie devient nécessaire. Mais le seuil s'est révélé bien plus haut qu'il ne l'imaginait. En Rust il créait des dossiers presque par défaut, dès le premier jour. En Zig, il a repoussé — et n'en a jamais eu besoin.
À retenir
La conclusion vaut au-delà de Zig : elle invite à se demander, dans n'importe quel langage, si l'on organise ses fichiers parce que le projet l'exige ou par habitude. Comme il le formule, c'est aussi un test d'honnêteté sur la taille réelle d'un projet — si vous ne résistez pas aux dossiers dès le premier jour, il est peut-être plus petit qu'il n'en a l'air.
Source : besok.github.io