Rui Ueyama, autor linkeru LLVM lld a prekladača chibicc, predstavil prvý stabilný release nového vysoko výkonného linkeru Mold, ktorý výrazne prekonáva rýchlosť prepojenia objektových súborov linkerov GNU gold a LLVM lld. Projekt je považovaný za pripravený na pracovné nasadenie a môže byť použitý ako rýchlejšia, transparentná náhrada GNU linker na Linuxových systémoch. V pláne na ďalšiu významnú verziu je podpora platformy macOS, po ktorej začne prispôsobovanie Mold pre Windows.
Mold je napísaný v jazyku C++ (C++20) a distribuuje sa pod licenciou AGPLv3, ktorá je kompatibilná s GPLv3, ale nie je kompatibilná s GPLv2, pretože vyžaduje zverejnenie zmien pri vývoji sieťových služieb. Takýto výber je vysvetlený túžbou získať financovanie vývoja — autor je ochotný predať práva na kód na prelicencovanie pod povolenou licenciou, ako je MIT, alebo poskytnúť samostatnú komerčnú licenciu tým, ktorí nie sú spokojní s AGPL.
Mold podporuje všetky funkcie GNU linker a vyznačuje sa veľmi vysokým výkonom — prepojenie sa vykonáva rýchlosťou, ktorá je len dvakrát pomalšia ako jednoduché kopírovanie súborov pomocou nástroja cp. Napríklad pri zostavení Chrome 96 (veľkosť kódu 1.89 GB) na prepojenie spustiteľných súborov s debuginfo na 8-jadrovom počítači s GNU gold trvá 53 sekúnd, s LLVM lld — 11.7 sekúnd, a Mold za iba 2.2 sekundy (26-krát rýchlejšie ako GNU gold). Pri prepojení Clang 13 (3.18 GB) s GNU gold je potrebných 64 sekúnd, s LLVM lld — 5.8 sekúnd, a s Mold — 2.9 sekundy. Pri prepojení Firefox 89 (1.64 GB) s GNU gold je potrebných 32.9 sekundy, s LLVM lld — 6.8 sekúnd, a s Mold — 1.4 sekundy.

Zníženie času pri linkovaní výrazne zlepšuje pohodlie pri vývoji veľkých projektov, pretože skracuje čakacie doby pri vytváraní spustiteľných súborov počas ladenia a testovania zmien. Motívom na vytvorenie Mold bolo podráždenie z nutnosti čakať na ukončenie linkovania po každej zmene v kóde, ako aj nízka efektívnosť existujúcich linkerov na mnohých jadrových systémoch a túžba vyskúšať zásadne odlišnú architektúru linkovania bez zbytočne zložitých modelov, ako je inkrementálne linkovanie.
Vysoký výkon linkovania spustiteľného súboru z veľkého počtu objektových súborov pripravených kompilátorom v Mold dosahuje pomocou rýchlejších algoritmov, aktívneho paralelizovania operácií medzi dostupnými CPU jadrami a použitím efektívnejších dátových štruktúr. Napríklad v Mold je implementovaná technika vykonávania intenzívnych výpočtov súčasne s kopírovaním súborov, predbežné načítanie objektových súborov do pamäte, použití rýchlych hash tabuliek pri riešení symbolov, skenovanie tabuliek presunov v samostatnom vlákne a deduplikácia opakujúcich sa sekcií v rôznych súboroch.
Zdroj: opennet.ru
