Mold 3.0-linkeren er blevet udgivet og kan bruges som en hurtigere og mere transparent erstatning for GNU-linkeren. Linux-systemer. Projektet udvikles af Rui Ueyama, forfatteren af LLVM lld-linkeren. Molds nøglefunktion er dens ekstremt høje linkhastighed, der markant overgår GNU Gold- og LLVM lld-linkerne (linkning i Mold er kun halvt så hurtig som blot at kopiere filer med cp-værktøjet). Koden er skrevet i Rust og distribueret under MIT-licensen.
Reduktion af linktid forbedrer brugervenligheden af store projekter betydeligt ved at reducere ventetiden under generering af eksekverbare filer under fejlfinding og test af ændringer. Motivationen for at oprette Mold stammede fra frustrationen over at skulle vente på, at linkningen blev fuldført efter hver kodeændring, den dårlige ydeevne af eksisterende linkere på multi-core systemer og ønsket om at afprøve en fundamentalt anderledes linkarkitektur uden at ty til alt for komplekse modeller såsom inkrementel linkning.
Høj ydeevne ved kompilering af en eksekverbar fil fra et stort antal compiler-forberedte objektfiler i Mold opnås ved at bruge hurtigere algoritmer, aktiv parallelisering af operationer mellem tilgængelige CPU-kerner og brug af mere effektive datastrukturer. For eksempel implementerer Mould teknikker til at udføre intensive beregninger samtidigt med filkopiering, forebyggende indlæsning af objektfiler i hukommelsen, brug af hurtige hashtabeller ved løsning af symboler, scanning af flytningstabeller i en separat tråd og deduplikering af duplikerede flettede sektioner i forskellige filer.
Mold 3.0-grenen er kendt for at omskrive kodebasen fra C++ (C++20) til Rust. Mold 3.0 kan bruges som en transparent erstatning for Mold 2.42.1, den seneste C++-udgivelse, og understøtter alle tidligere tilgængelige muligheder og målarkitekturer. Overgangen til Rust har gjort det muligt at beskytte projektet mod potentielle problemer ved håndtering af beskadigede objektfiler – i situationer, hvor C++-versionen gik ned på grund af adgang uden for grænserne, stopper Rust-implementeringen ved grænsekontrolfasen. Rust-implementeringens ydeevne er på niveau med C++-versionen.
Udover at migrere til Rust var et centralt mål i udviklingen af 3.0-grenen at forbedre kompatibiliteten med GNU ld og forberede projektet til brug som standardlinker i distributioner. LinuxByggesystemet er blevet erstattet med Cargo, og testsystemet er blevet erstattet med Cargo Test, der erstatter ctest. oneTBB-biblioteket er blevet fjernet fra afhængigheder.
Kilde: opennet.ru
