Rui Ueyama, autor linkeru LLVM lld a kompilátoru chibicc, představil první stabilní verzi nového vysoce výkonného linkeru Mold, který výrazně překonává rychlostí spojování objektových souborů linkery GNU gold a LLVM lld. Projekt byl uznán jako připravený pro pracovního nasazení a může sloužit jako rychlejší průhledná náhrada GNU linkeru na systémech Linux. Mezi plány na další významné vydání je doladění podpory platformy macOS, po čemž začne práce na adaptaci Mold pro Windows.
Mold je napsán v C++ (C++20) a je distribuován pod licencí AGPLv3, která je kompatibilní s GPLv3, ale není kompatibilní s GPLv2, protože vyžaduje zveřejnění změn při vývoji síťových služeb. Tento výběr je vysvětlen přáním získat financování vývoje — autor je ochoten prodat práva na kód k pře licensing pod permissivní licencí, jako je MIT, nebo poskytnout samostatnou komerční licenci pro ty, kteří nesouhlasí s AGPL.
Mold podporuje všechny funkce GNU linkeru a vyznačuje se velmi vysokým výkonem — spojování probíhá rychlostí, která je pouze dvakrát pomalejší než jednoduché kopírování souborů pomocí utility cp. Například při sestavení Chrome 96 (velikost kódu 1.89 GB) trvá spojení spustitelných souborů s debuginfo na 8-jádrovém počítači pomocí GNU gold 53 sekundy, LLVM lld 11.7 sekundy a Mold pouze 2.2 sekundy (26krát rychleji než GNU gold). Při spojování Clang 13 (3.18 GB) v GNU gold trvá 64 sekund, v LLVM lld 5.8 sekund a v Mold 2.9 sekundy. Při spojování Firefox 89 (1.64 GB) v GNU gold je potřeba 32.9 sekund, v LLVM lld 6.8 sekund a v Mold 1.4 sekundy.

Snížení doby potřebné na spojování výrazně zvyšuje pohodlí při vývoji velkých projektů díky zkrácení čekací doby v procesu generování spustitelných souborů během ladění a testování změn. Motivem pro vznik Mold bylo rozčilování z nutnosti čekat na dokončení spojování po každé změně v kódu, stejně jako nízká účinnost stávajících linkerů na vícejádrových systémech a touha vyzkoušet zcela jinou architekturu spojování, aniž by se uchýlili k nadměrně komplikovaným modelům, jako je inkrementální spojování.
Vysoký výkon linkování spustitelného souboru z velkého množství objektových souborů připravených kompilátorem v Moldu je dosažen použitím rychlejších algoritmů, aktivním paralelizováním operací mezi dostupnými jádry CPU a aplikací efektivnějších datových struktur. Například v Moldu je implementována technika provádění intenzivních výpočtů současně s kopírováním souborů, předběžné načítání objektových souborů do paměti, využití rychlých hashovacích tabulek při rozřešení symbolů, skenování tabulek relokací v samostatném vlákně a deduplikace opakujících se v různých souborech slučovaných sekcí.
Zdroj: opennet.ru
