-
Les succès et les échecs de Ninja
- Il y a environ 9 ans, l’auteur a présenté Ninja, un système de build similaire à Make. Au début, c’était un peu embarrassant, mais aujourd’hui il est largement utilisé.
- Parmi les principaux projets qui utilisent Ninja figurent Chrome, Android et le projet Meson.
- Ninja est le projet open source le plus réussi de l’auteur : publié en 2011, il en a transmis la propriété en 2014, et il est désormais entre les mains d’un troisième mainteneur.
- Il a appris qu’en programmation, l’architecture est plus importante que l’écriture du code, et que les problèmes sociaux sont encore plus importants que l’architecture.
-
Détails techniques
- Ninja est un système simple qui exécute des commandes selon des exigences données.
- Ninja lit un fichier
ninja.build, vérifie l’horodatage de modification des fichiers et exécute en parallèle les commandes nécessaires.
- Par rapport à Make, Ninja offre moins de fonctionnalités dans son langage de build d’entrée et met l’accent sur une exécution rapide.
- Ninja optimise la comparaison des chemins en associant les chemins de fichiers à des objets en mémoire.
-
Notes d’architecture
- La représentation du graphe de Ninja utilise un graphe biparti entre fichiers et commandes, ce qui capture mieux la structure du build.
- Des données de dépendances supplémentaires sont utilisées pour gérer les dépendances des en-têtes C.
- Ninja n’est pas un processus démon persistant et recommence son travail depuis le début à chaque exécution.
- L’état des fichiers étant déjà mis en cache par le noyau, il est rarement nécessaire de le mettre de nouveau en cache en espace utilisateur.
- Ninja a été conçu à partir du build de Chrome et rencontre des problèmes de passage à l’échelle sur les très grands projets.
-
La métaphore de « l’assembleur »
- Au lieu d’implémenter les fonctionnalités de divers systèmes de build, Ninja n’implémente que le graphe d’actions et laisse l’utilisateur choisir d’autres programmes générateurs.
- Cette conception rend Ninja rapide et flexible.
-
L’importance des valeurs par défaut
- Ninja exécute les commandes en parallèle par défaut, ce qui permet des builds parallèles plus sûrs qu’avec Make.
-
Vitesse
- Ninja met l’accent sur les performances des builds incrémentaux dans les grandes bases de code, ce qui a un fort impact sur la satisfaction des utilisateurs.
- Ninja utilise moins de CPU, ce qui améliore aussi les performances globales des builds.
-
CMake
- Ninja s’intègre bien à CMake, et cette intégration lui a permis d’être utilisé pour le travail sur LLVM.
-
Support de Windows
- Ninja fonctionne aussi sous Windows, et nombre de ses premiers utilisateurs étaient sur Windows.
-
Travaux connexes
- La conception de Ninja s’est inspirée de blaze/bazel, le système de build de Google.
-
Maintenance open source
- La maintenance open source n’est pas agréable, et il y a eu beaucoup de demandes et de critiques de la part des utilisateurs.
- L’auteur voulait impressionner ses collègues hackers à travers son logiciel.
-
Remerciements finaux
- L’auteur adresse ses remerciements aux mainteneurs et contributeurs de Ninja.
1 commentaires
Commentaires Hacker News
Certains estiment qu’en programmation, l’architecture est plus importante que l’écriture du code, et que les enjeux sociaux sont encore plus importants que l’architecture
Ninja joue un rôle important dans le système de build d’Android
soong, un système de build déclaratif personnalisékati, qui convertit les Makefiles en fichiers de build NinjaCertains indiquent que Google a mené des recherches sur la latence et espèrent que ces travaux seront rendus publics
Certains pensent que Ninja restera utilisé pendant un certain temps, car il est nécessaire pour les modules C++20 avec CMake
Certains sont passés de Ninja à Samurai et disent que tout s’est amélioré
Certains estiment qu’un compromis est nécessaire entre exactitude, praticité et performances, et qu’il faut le choisir de manière délibérée
Certains disent avoir de l’expérience avec les systèmes de build et que Ninja est suffisamment petit pour être implémenté dans son langage de programmation préféré
Certains trouvent que le nom de Ninja est bon et disent qu’il existe un moyen de le rendre plus rapide