Rui Ueyama, auteur de l'éditeur de liens LLVM lld et du compilateur chibicc, a publié la première version stable de Mold, un nouvel éditeur de liens haute performance. Ce dernier surpasse nettement les éditeurs de liens GNU gold et LLVM lld en termes de vitesse de liaison des fichiers objets. Le projet est considéré comme prêt pour un déploiement en production et peut être utilisé comme une alternative plus rapide et transparente à l'éditeur de liens GNU. Linux-systèmes. La prochaine version majeure prévoit notamment d'assurer la maturité du support de la plateforme. macOS, après quoi commenceront les travaux d'adaptation de Mold pour Windows.
Mold est écrit en C++ (C++20) et est sous licence AGPLv3, qui est compatible avec GPLv3, mais pas compatible avec GPLv2, car il nécessite des modifications ouvertes lors du développement de services réseau. Ce choix s'explique par le désir d'obtenir un financement pour le développement - l'auteur est prêt à vendre les droits du code pour obtenir une nouvelle licence sous une licence permissive, telle que le MIT, ou à fournir une licence commerciale distincte pour ceux qui ne sont pas satisfaits de l'AGPL.
Mold prend en charge toutes les fonctionnalités de l'éditeur de liens GNU et offre des performances très élevées - la liaison est effectuée à une vitesse deux fois moins rapide que la simple copie de fichiers avec l'utilitaire cp. Par exemple, lors de la création de Chrome 96 (taille de code 1.89 Go), il faut 8 secondes pour lier les fichiers exécutables avec les informations de débogage sur un ordinateur à 53 cœurs utilisant GNU Gold, LLVM lld - 11.7 secondes et Mold seulement 2.2 secondes (26 fois plus rapide que GNU or). Lors de la liaison de Clang 13 (3.18 Go), cela prend 64 secondes dans GNU Gold, 5.8 secondes dans LLVM lld et 2.9 secondes dans Mold. Lors de la construction de Firefox 89 (1.64 Go), cela prend 32.9 secondes dans GNU Gold, 6.8 secondes dans LLVM lld et 1.4 seconde dans Mold.

La réduction du temps de construction peut améliorer considérablement la commodité du développement de grands projets en réduisant l'attente dans le processus de génération des fichiers exécutables lors du débogage et du test des modifications. La motivation pour créer Mold était la frustration de devoir attendre que la liaison soit terminée après chaque changement de code, les mauvaises performances des éditeurs de liens existants sur les systèmes multicœurs et le désir d'essayer une architecture de liaison fondamentalement différente sans recourir à des modèles trop compliqués tels que comme liaison incrémentielle.
Les performances élevées de liaison d'un fichier exécutable à partir d'un grand nombre de fichiers objets préparés par le compilateur dans Mold sont obtenues grâce à l'utilisation d'algorithmes plus rapides, à la parallélisation active des opérations entre les cœurs de processeur disponibles et à l'utilisation de structures de données plus efficaces. Par exemple, Mold implémente des techniques pour effectuer des calculs intensifs lors de la copie de fichiers, précharger des fichiers objets en mémoire, utiliser des tables de hachage rapides pour la résolution des caractères, analyser les tables de relocalisation dans un thread séparé et dédupliquer les sections fusionnées qui sont répétées dans différents fichiers.
Source: opennet.ru
