Rui Ueyama, auteur du lier LLVM lld et du compilateur chibicc, a présenté la première version stable de son nouvel éditeur très performant Mold, surpassant clairement en vitesse de liaison les éditeurs GNU gold et LLVM lld. Le projet est jugé prêt pour des déploiements en production et peut servir de remplacement plus rapide et transparent pour le lier GNU sur les systèmes Linux. Parmi les plans pour la prochaine mise à jour importante, il est prévu d'ajouter la prise en charge de la plateforme macOS, avant de commencer à adapter Mold pour Windows.
Mold est écrit en C++ (C++20) et est distribué sous licence AGPLv3, qui est compatible avec GPLv3, mais incompatible avec GPLv2, car elle exige l'ouverture des modifications lors du développement de services réseau. Ce choix est motivé par le désir d'obtenir un financement pour le développement — l'auteur est prêt à vendre les droits sur le code pour le re-licencier sous une licence permissive, telle que MIT, ou à fournir une licence commerciale distincte pour ceux qui ne souhaitent pas utiliser l'AGPL.
Mold prend en charge toutes les fonctionnalités du lier GNU et se distingue par sa très haute performance — la liaison s'effectue à une vitesse seulement deux fois plus lente que celle d'une simple copie de fichiers avec l'utilitaire cp. Par exemple, lors de la compilation de Chrome 96 (taille du code 1.89 Go), la liaison des fichiers exécutables avec les informations de débogage sur un ordinateur à 8 cœurs prend 53 secondes avec GNU gold, 11.7 secondes avec LLVM lld, et seulement 2.2 secondes avec Mold (26 fois plus rapide que GNU gold). Lors de la liaison de Clang 13 (3.18 Go), il faut 64 secondes avec GNU gold, 5.8 secondes avec LLVM lld, et 2.9 secondes avec Mold. Pour la liaison de Firefox 89 (1.64 Go), il faut 32.9 secondes avec GNU gold, 6.8 secondes avec LLVM lld, et 1.4 secondes avec Mold.

La réduction du temps de liaison permet d'améliorer considérablement la commodité du développement de projets importants en réduisant le temps d'attente lors de la formation des fichiers exécutables pendant le débogage et le test des modifications. La motivation derrière la création de Mold est le mécontentement face à la nécessité d'attendre la fin de la liaison après chaque modification du code, ainsi que l'inefficacité des lieurs existants sur des systèmes multi-cœurs et le désir d'essayer une architecture de liaison fondamentalement différente, sans recourir à des modèles excessivement compliqués tels que la liaison incrémentielle.
La haute performance de l'assemblage de fichiers exécutables à partir d'un grand nombre de fichiers objets préparés par le compilateur dans Mold est atteinte grâce à l'utilisation d'algorithmes plus rapides, à un parallélisme actif des opérations entre les cœurs CPU disponibles et à l'application de structures de données plus efficaces. Par exemple, Mold met en œuvre une technique permettant d'effectuer des calculs intensifs en même temps que la copie de fichiers, le chargement anticipé des fichiers objets en mémoire, l'utilisation de tables de hachage rapides pour la résolution des symboles, le scan des tables de déplacements dans un thread séparé et la dé-duplication des sections répétées dans différents fichiers combinés.
Source : opennet.ru
