Wild, ein schneller Linker für Linux
(github.com/davidlattimore)-
Wild-Linker
- Wild ist ein Werkzeug mit dem Ziel, für iterative Entwicklung sehr schnelles Linking zu ermöglichen.
- Inkrementelles Linking ist noch nicht implementiert, aber schon jetzt zeigt es eine beachtlich hohe Performance.
- Für Production-Builds wird empfohlen, einen ausgereiften Linker wie GNU ld oder LLD zu verwenden.
- Wenn du während der Entwicklung schnelle Build-Zeiten möchtest, kannst du Wild ausprobieren.
- Es ist nutzbar, wenn du unter x86-64 Linux entwickelst; bei Problemen sind Bug-Reports willkommen.
-
Installation
- Um vorgefertigte Binärdateien zu installieren, kannst du den Befehl von der Release-Seite kopieren und verwenden.
- Du kannst die
wild-Binärdatei auch manuell in deinen Pfad kopieren. - Um es selbst zu bauen und zu installieren, verwende den Befehl
cargo install --locked --bin wild --git https://github.com/davidlattimore/wild.git wild.
-
Als Standard-Linker verwenden
- Um Wild als Standard-Linker für das Bauen von Rust-Code zu verwenden, füge eine Einstellung in
~/.cargo/config.tomlhinzu.
- Um Wild als Standard-Linker für das Bauen von Rust-Code zu verwenden, füge eine Einstellung in
-
Q&A
- Warum noch ein weiterer Linker?
- Mold ist bereits sehr schnell, unterstützt aber kein inkrementelles Linking. Wild zielt auf inkrementelles Linking ab.
- Da es in Rust geschrieben ist, besteht die Erwartung, dass es die Komplexität des inkrementellen Linkings bewältigen kann.
- Was bereits funktioniert
- Derzeit unterstützte Plattform/Architektur: x86-64 unter Linux
- Kann statisch gelinkte Binärdateien, dynamisch gelinkte Binärdateien und Shared Objects (
.so-Dateien) erzeugen - Kompatibilität mit Rust proc-macros bestätigt
- Tests mit beliebten Crates von crates.io bestanden
- Unterstützung für Debug-Informationen
- Was noch nicht unterstützt wird
- Inkrementelles Linking, Unterstützung für andere Architekturen als x86-64, Unterstützung für verschiedene Linker-Flags, Unterstützung für Mac und Windows usw.
- Warum noch ein weiterer Linker?
-
Benchmarks
- Das Ziel von Wild ist es, durch inkrementelles Linking sehr hohe Performance zu erzielen.
- Auch beim nicht inkrementellen Linking wird eine möglichst hohe Performance angestrebt.
- Laut Benchmark-Ergebnissen zeigt Wild ohne Debug-Informationen eine sehr hohe Performance.
- Wenn Debug-Informationen enthalten sind, sinkt die Performance etwas.
-
Rust-Code linken
- Mit dem Befehl
cargo testkannst du Crates mit Wild bauen und testen. - Der Clang-Compiler muss installiert sein; GCC erlaubt die Verwendung eines beliebigen Linkers nicht.
- Mit dem Befehl
-
Mitwirken
- Informationen dazu, wie du zu Wild beitragen kannst, findest du in CONTRIBUTING.md.
-
Sponsoring
- Wenn du dieses Projekt unterstützt, kann länger in Vollzeit daran gearbeitet werden.
-
Lizenz
- Wahlweise Apache License, Version 2.0 oder MIT-Lizenz.
1 Kommentare
Hacker-News-Kommentare
Obwohl nach dem Lizenzwechsel von mold von AGPL zu MIT der Bedarf an einem neuen schnellen Linker gesunken ist, ist es überraschend, dass dieses Projekt aufgetaucht ist. Bemerkenswert ist, dass es in manchen Fällen doppelt so schnell wie mold sein soll.
Ich habe mir dieses Projekt schon früher angesehen, aber es wirkt noch nicht produktionsreif. Deshalb nutze ich weiterhin mold.
Für macOS-Nutzer: Apple hat vor 1–2 Jahren einen neuen Linker veröffentlicht, und bei der Verwendung mit Rust muss man in
config.tomleine bestimmte Einstellung hinzufügen.Es wäre spannend, wenn ein C/C++-Compiler das gesamte Programm ohne Link-Schritt als eine Einheit bauen würde. Externe Bibliotheken werden größtenteils dynamisch gelinkt, daher wäre das Entfernen des Link-Prozesses kein Problem.
Das Interesse an schnellen Linkern nimmt seit Jahren stetig zu, etwa mit Gold im Jahr 2008, Lld im Jahr 2015 und mold im Jahr 2021.
Durch die Popularität von Rust wächst auch das Interesse an schnellen Linkern, denn bei Rust-Binärdateien kostet der Link-Schritt viel Zeit. Das ist nicht nur ein Rust-Problem, sondern liegt an statischem Linken und den Optimierungen von LLVM.
John Levines "Linkers and Loaders" ist ein gutes Buch zu dem Thema und war, als ich es vor einigen Jahren gelesen habe, sehr interessant.
Ein Vergleich der Performance von wild, mold und ld zeigt, dass die Link-Zeit bei gut strukturierten Projekten kein großes Problem ist.
Die Performance-Benchmarks wurden auf einem System76-Lemur-Pro-Laptop des Modelljahres 2020 mit 4 Kernen (8 Threads) und 42 GB RAM ausgeführt.
Manche fragen sich auch, was ein Linker überhaupt ist.
Es gab die Frage, ob sich damit der Linux-Kernel linken lässt; das war ein nützlicher Meilenstein für LLD.