Rui Ueyama, der Autor des LLVM lld Linkers und des Chibicc Compilers, hat die erste stabile Version des neuen Hochleistungs-Linkers Mold vorgestellt, der im Vergleich zu den Linkern GNU gold und LLVM lld eine deutlich schnellere Objektdateibindung aufweist. Das Projekt wird als bereit für den produktiven Einsatz angesehen und kann als schnellere transparente Alternative zum GNU Linker auf Linux-Systemen verwendet werden. Zu den Plänen für die nächste bedeutende Version gehört die Fertigstellung der Unterstützung für die macOS Plattform, gefolgt von der Anpassung von Mold für Windows.
Mold ist in C++ (C++20) geschrieben und wird unter der Lizenz AGPLv3 veröffentlicht, die mit GPLv3 kompatibel, aber nicht mit GPLv2 kompatibel ist, da sie eine Offenlegung von Änderungen bei der Entwicklung von Netzwerkdiensten erfordert. Diese Wahl erklärt sich aus dem Wunsch, die Entwicklung zu finanzieren — der Autor ist bereit, die Rechte am Code für eine Umlizenzierung unter einer permissiven Lizenz wie MIT zu verkaufen oder eine separate kommerzielle Lizenz für diejenigen anzubieten, die mit der AGPL nicht einverstanden sind.
Mold unterstützt alle Funktionen des GNU Linkers und zeichnet sich durch eine sehr hohe Leistung aus – das Verlinken erfolgt mit einer Geschwindigkeit, die nur doppelt so langsam ist wie das einfache Kopieren von Dateien mit dem cp-Befehl. Zum Beispiel benötigt der Build von Chrome 96 (mit einer Codegröße von 1,89 GB) für die Verlinkung von ausführbaren Dateien mit Debug-Informationen auf einem 8-Kern-Computer bei Verwendung von GNU gold 53 Sekunden, LLVM lld 11,7 Sekunden und Mold nur 2,2 Sekunden (26-mal schneller als GNU gold). Beim Linken von Clang 13 (3,18 GB) benötigt GNU gold 64 Sekunden, LLVM lld 5,8 Sekunden und Mold 2,9 Sekunden. Für die Linkerstellung von Firefox 89 (1,64 GB) sind es mit GNU gold 32,9 Sekunden, mit LLVM lld 6,8 Sekunden und mit Mold 1,4 Sekunden.

Die Verkürzung der Kompilierungszeit ermöglicht eine erhebliche Verbesserung der Benutzerfreundlichkeit bei der Entwicklung großer Projekte, indem die Wartezeiten beim Erstellen von ausführbaren Dateien während des Debuggens und Testens von Änderungen reduziert werden. Der Antrieb zur Entwicklung von Mold entstand aus der Frustration über das Warten auf den Abschluss der Kompilierung nach jeder Codeänderung, sowie der geringen Effizienz bestehender Compiler auf Mehrkernsystemen und dem Wunsch, eine völlig neue Compiler-Architektur auszuprobieren, ohne auf übermäßig komplexe Modelle wie inkrementelle Kompilierung zurückzugreifen.
Die hohe Leistung des Linkens von ausführbaren Dateien aus einer Vielzahl von vom Compiler vorbereiteten Objektdateien in Mold wird durch schnellere Algorithmen, aktives Parallelisieren von Operationen zwischen den verfügbaren CPU-Kernen und effizientere Datenstrukturen erreicht. So ermöglicht Mold zum Beispiel die Durchführung rechenintensiver Aufgaben gleichzeitig mit dem Kopieren von Dateien, das Vorab-Laden von Objektdateien in den Speicher, die Verwendung schneller Hash-Tabellen zur Symbolauflösung, das Scannen von Relocation-Tabellen in einem separaten Thread und die Deduplizierung wiederholter, in verschiedenen Dateien kombinierter Abschnitte.
Quelle: opennet.ru
