veilletech.fr
20 août Feed du jour
#06 ZIG Article

Sept ans de Rust, puis Zig : ce qui change

Vos dossiers servent-ils le projet ou l'habitude ?

Un développeur Rust de sept ans d'expérience a réimplémenté sa bibliothèque JSONPath en Zig. Son retour porte moins sur la syntaxe que sur ce que l'absence d'outillage et la structure plate changent dans la façon de travailler.

2 min de lecturevidéo 1:08
Partager
Sommaire4 sections
  1. Ce qui se passe
  2. Ce qui l'a surpris
  3. La structure plate
  4. À retenir

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