Présentation de build2
Build2 est un système de construction qui vise à fournir une alternative plus rapide et plus efficace aux outils de construction traditionnels tels que Ninja. Dans cet article, nous allons examiner les performances de build2 par rapport à Ninja en utilisant le projet Xerces-C++ comme exemple.
Contexte technique
Ninja est connu pour sa vitesse de construction, mais il bénéficie également d'une logique de construction intégrée fournie par l'outil qui génère les fichiers de construction Ninja. Build2, en revanche, est un système de construction natif qui ne nécessite pas d'étape de génération. Pour comparer les performances de build2 et Ninja, nous allons utiliser le projet Xerces-C++, un parseur et sérialiseur XML pour C++.
Performances de construction
Les tests de construction ont montré que Ninja complète la construction de Xerces-C++ en 3,4 secondes, tandis que build2 prend 3,8 secondes, soit environ 11% de plus. Cependant, si l'on prend en compte le temps nécessaire à CMake pour générer les fichiers de construction Ninja, le temps total de construction est de 19 secondes. Build2, en revanche, peut construire le projet en 3,8 secondes sans nécessiter d'étape de génération.
Optimisation des performances
Pour améliorer les performances de build2, nous allons désactiver certaines fonctionnalités qui ne sont pas nécessaires pour la construction de Xerces-C++. La première fonctionnalité à désactiver est la détection des changements ignorables pour les fichiers source C et C++. Build2 utilise une méthode plus précise pour détecter les changements, mais cela a un coût en termes de performances. En désactivant cette fonctionnalité, le temps de construction de build2 passe à 3,4 secondes, ce qui est similaire au temps de construction de Ninja.
Ensuite, nous allons désactiver la compression dans le cache de fichiers. Cela nous permet de gagner du temps de construction, mais au détriment de l'espace disque temporaire. Avec cette optimisation, le temps de construction de build2 passe à 3,355 secondes, ce qui est légèrement plus rapide que Ninja.
Time (mean ± σ): 3.355 s ± 0.067 s [User: 49.987s, System: 6.153s] Range (min … max): 3.281 s … 3.471 s 10 runs
Enfin, build2 effectue encore plus de travail que Ninja, comme la génération du fichier d'en-tête XercesVersion.hpp et la détection des changements pour les fichiers source. Cela signifie que build2 est capable de construire le projet Xerces-C++ plus rapidement que Ninja tout en effectuant plus de travail.