Objavljen je izdanek linkerja Mold 3.0, ki se lahko uporablja kot hitrejša prozorna zamenjava za GNU linker na sistemih Linux. Projekt razvija Rui Ueyama, avtor linkerja LLVM lld. Ključna značilnost Mold je zelo visoka hitrost povezovanja objekta, ki bistveno presega linkere GNU gold in LLVM lld (povezava v Mold se izvaja s hitrostjo, ki je samo dvakrat počasnejša od preprostega kopiranja datotek z orodjem cp). Koda je napisana v jeziku Rust in je razširjena pod licenco MIT.
Zmanjšanje časa za povezovanje znatno povečuje udobje pri razvoju velikih projektov z zmanjšanjem čakanja pri ustvarjanju izvršnih datotek med odpravljanjem napak in testiranjem sprememb. Motivacija za ustvarjanje Mold je bila jeza zaradi potrebe po čakanju na dokončanje povezovanja po vsaki spremembi kode, nizka učinkovitost obstoječih linkerjev na večjedrnih sistemih ter želja po preizkusu načeloma drugačne arhitekture povezovanja, brez zapletenih modelov, kot je inkrementalno povezovanje.
Visoka učinkovitost povezovanja izvršne datoteke iz velikega števila pripravljenih objektnih datotek v Mold je dosežena z uporabo hitrejših algoritmov, aktivnim razporejanjem operacij med razpoložljiva jedra CPU in uporabo bolj učinkovitih podatkovnih struktur. Na primer, v Mold je izvedena tehnika izvajanja intenzivnih izračunov hkrati s kopiranjem datotek, predpomnjenje objektnih datotek v RAM, uporaba hitrih hashtabel pri razreševanju simbolov, skeniranje premikov v ločenem procesu in deduplikacija ponavljajočih se sekcij v različnih datotekah.
Večina Mold 3.0 se odlikuje prepisovanjem izvorne kode iz C++ (C++20) u Rust. Mold 3.0 se može koristiti kao prozirna zamjena za Mold 2.42.1, posljednje izdanje na C++, i podržava sve ranije dostupne opcije i ciljne arhitekture. Prelazak na Rust osigurao je projekt od potencijalnih problema pri obradi oštećenih objektnih datoteka — u situacijama kada je verzija na C++ neuspješno završila zbog pristupa memorijskim područjima izvan bafera, verzija na Rust prekinula bi rad tokom provjere granica. Performanse implementacije na Rust su na istom nivou kao verzija na C++.
Osim migracije na Rust, ključni cilj pri razvoju verzije 3.0 bio je povećanje kompatibilnosti s GNU ld i priprema projekta za korištenje kao zadani link za distribucije Linuxa. Sustav gradnje je zamijenjen s CMake na Cargo, a sustav testiranja s ctest na cargo test. Biblioteka oneTBB je isključena iz ovisnosti.
Izvor: opennet.ru
