Mold 3.0-länkaren har släppts och kan användas som en snabbare och transparent ersättning för GNU-länkaren. Linux-system. Projektet utvecklas av Rui Ueyama, författaren till LLVM lld-länkaren. Molds viktigaste funktion är dess extremt höga länkhastighet, som avsevärt överträffar GNU Gold- och LLVM lld-länkarna (länkning i Mold är bara hälften så snabb som att bara kopiera filer med cp-verktyget). Koden är skriven i Rust och distribueras under MIT-licensen.
Att minska länkningstiden förbättrar användbarheten hos stora projekt avsevärt genom att minska väntetiden under generering av körbara filer vid felsökning och testning av ändringar. Motivationen för att skapa Mold härrörde från frustrationen över att behöva vänta på att länkningen skulle slutföras efter varje kodändring, den dåliga prestandan hos befintliga länkare på flerkärniga system och önskan att prova en fundamentalt annorlunda länkarkitektur utan att tillgripa alltför komplexa modeller som stegvis länkning.
Mold uppnår hög prestanda vid kompilering av körbara filer från ett stort antal kompilatorförberedda objektfiler genom att använda snabbare algoritmer, aktivt parallellisera operationer över tillgängliga CPU-kärnor och använda mer effektiva datastrukturer. Mold implementerar till exempel en teknik för att utföra intensiva beräkningar samtidigt med filkopiering, förebyggande laddning av objektfiler i minnet, använda snabba hashtabeller för symbolupplösning, skanna omlokaliseringstabeller i en separat tråd och deduplicera dubbletter av sammanslagna sektioner över olika filer.
Mold 3.0-grenen är känd för att ha skrivit om kodbasen från C++ (C++20) till Rust. Mold 3.0 kan användas som en transparent ersättning för Mold 2.42.1, den senaste C++-utgåvan, och stöder alla tidigare tillgängliga alternativ och målarkitekturer. Övergången till Rust har gjort det möjligt att skydda projektet från potentiella problem vid hantering av skadade objektfiler – i situationer där C++-versionen kraschade på grund av åtkomst utanför gränserna, stoppas Rust-implementeringen vid gränskontrollstadiet. Prestandan för Rust-implementeringen är i nivå med C++-versionen.
Förutom att migrera till Rust var ett viktigt mål med utvecklingen av 3.0-grenen att förbättra kompatibiliteten med GNU ld och förbereda projektet för användning som standardlänkare i distributioner. LinuxByggsystemet har ersatts med Cargo, och testsystemet har ersatts med Cargo Test, vilket ersätter ctest. oneTBB-biblioteket har tagits bort från beroenden.
Källa: opennet.ru
