De Mold 3.0-linker is uitgebracht en kan worden gebruikt als een snellere, transparante vervanging voor de GNU-linker. Linux-systemen. Het project wordt ontwikkeld door Rui Ueyama, de auteur van de LLVM lld-linker. Het belangrijkste kenmerk van Mold is de extreem hoge linksnelheid, die de GNU Gold- en LLVM lld-linkers aanzienlijk overtreft (linken in Mold is slechts half zo snel als het simpelweg kopiëren van bestanden met het cp-hulpprogramma). De code is geschreven in Rust en wordt gedistribueerd onder de MIT-licentie.
Het aanzienlijk verkorten van de koppelingstijd verbetert de bruikbaarheid van grote projecten aanzienlijk, doordat de wachttijd tijdens het genereren van uitvoerbare bestanden bij het debuggen en testen van wijzigingen wordt verminderd. De motivatie voor het ontwikkelen van Mold kwam voort uit de frustratie van het moeten wachten tot het koppelen na elke codewijziging was voltooid, de slechte prestaties van bestaande linkers op multi-core systemen en de wens om een fundamenteel andere koppelingsarchitectuur uit te proberen zonder gebruik te maken van al te complexe modellen zoals incrementeel koppelen.
Mold behaalt hoge prestaties bij het compileren van uitvoerbare bestanden uit een groot aantal door de compiler voorbereide objectbestanden door snellere algoritmen te gebruiken, bewerkingen actief te paralleliseren over beschikbare CPU-cores en efficiëntere datastructuren toe te passen. Zo implementeert Mold bijvoorbeeld een techniek voor het gelijktijdig uitvoeren van intensieve berekeningen met het kopiëren van bestanden, het preventief laden van objectbestanden in het geheugen, het gebruik van snelle hashtabellen voor symboolresolutie, het scannen van relocatietabellen in een aparte thread en het dedupliceren van dubbele samengevoegde secties in verschillende bestanden.
De Mold 3.0-branch is opmerkelijk omdat de codebase is herschreven van C++ (C++20) naar Rust. Mold 3.0 kan worden gebruikt als een transparante vervanging voor Mold 2.42.1, de laatste C++-release, en ondersteunt alle eerder beschikbare opties en doelarchitecturen. De overstap naar Rust heeft het mogelijk gemaakt om het project te beschermen tegen potentiële problemen bij het verwerken van beschadigde objectbestanden: in situaties waar de C++-versie crashte vanwege toegang buiten de toegestane grenzen, stopt de Rust-implementatie bij de grenscontrole. De prestaties van de Rust-implementatie zijn vergelijkbaar met die van de C++-versie.
Naast de overstap naar Rust was een belangrijk doel bij de ontwikkeling van de 3.0-versie het verbeteren van de compatibiliteit met GNU ld en het voorbereiden van het project voor gebruik als de standaardlinker in distributies. LinuxHet buildsysteem is vervangen door Cargo en het testsysteem is vervangen door cargo test, ter vervanging van ctest. De oneTBB-bibliotheek is verwijderd uit de afhankelijkheden.
Bron: opennet.ru
