Rui Ueyama, der Autor des LLVM lld Linkers und des Chibicc Compilers, hat die erste stabile Version des neuen leistungsstarken Linkers Mold vorgestellt, der in Bezug auf die Geschwindigkeit bei der Verknüpfung von Objektdateien den GNU gold und den LLVM lld deutlich übertrifft. 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 den nächsten bedeutenden Release gehört die Bereitstellung der Unterstützung für die macOS-Plattform, wonach die Anpassung von Mold für Windows beginnen wird.
Mold ist in C++ (C++20) geschrieben und wird unter der Lizenz AGPLv3 verbreitet, die mit GPLv3 kompatibel ist, jedoch nicht mit GPLv2, da sie erfordert, dass Änderungen bei der Entwicklung von Netzwerkanwendungen offengelegt werden. Diese Entscheidung wird damit begründet, dass eine Finanzierung der Entwicklung gesichert werden soll – der Autor ist bereit, die Rechte an den Codes zum Zwecke der Neu-Lizenzierung 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 sehr hohe Leistung aus – die Verknüpfung erfolgt mit einer Geschwindigkeit, die nur zweimal langsamer ist als das einfache Kopieren von Dateien mit dem cp-Befehl. Zum Beispiel benötigt die Erstellung von Chrome 96 (Codegröße 1,89 GB) für die Verknüpfung der ausführbaren Dateien mit Debuginformationen auf einem 8-Kern-Computer bei Verwendung von GNU gold 53 Sekunden, bei LLVM lld 11,7 Sekunden und bei Mold nur 2,2 Sekunden (26-mal schneller als GNU gold). Bei der Verknüpfung von Clang 13 (3,18 GB) benötigt GNU gold 64 Sekunden, LLVM lld 5,8 Sekunden und Mold 2,9 Sekunden. Bei der Verknüpfung von Firefox 89 (1,64 GB) sind bei GNU gold 32,9 Sekunden erforderlich, bei LLVM lld 6,8 Sekunden und bei Mold 1,4 Sekunden.

Die Verkürzung der Linkerzeit ermöglicht eine erhebliche Verbesserung des Komforts bei der Entwicklung großer Projekte, indem die Wartezeiten bei der Erstellung von ausführbaren Dateien während der Debugging- und Teständerungen verkürzt werden. Die Motivation zur Schaffung von Mold entstand aus der Frustration über die Notwendigkeit, nach jeder Änderung im Code auf den Abschluss des Linkens zu warten, sowie der geringen Effizienz bestehender Linker auf Multicore-Systemen und dem Wunsch, eine grundlegend andere Linkerarchitektur auszuprobieren, ohne auf übermäßig komplizierte Modelle wie inkrementelles Linking zurückzugreifen.
Die hohe Leistung des Linkens von ausführbaren Dateien aus einer großen Anzahl vorbereiteter Objektdateien im Mold wird durch den Einsatz schnellerer Algorithmen, aktives Parallelisieren von Operationen zwischen den verfügbaren CPU-Kernen und die Anwendung effizienterer Datenstrukturen erreicht. Zum Beispiel wird im Mold eine Technik implementiert, die intensive Berechnungen gleichzeitig mit dem Kopieren von Dateien ausführt, vorzeitiges Laden von Objektdateien in den Speicher, Verwendung schneller Hash-Tabellen zur Auflösung von Symbolen, Scannen von Umzugstabellen in einem separaten Thread und Duplizierung von sich wiederholenden, in verschiedenen Dateien zusammengeführten Abschnitten.
Quelle: opennet.ru
