Objavljen je izdanak linker-a Mold 3.0, koji se može koristiti kao brža, transparentna zamjena za GNU linker na Linux sustavima. Projekt vodi Rui Ueyama, autor linker-a LLVM lld. Ključna značajka Molda je vrlo visoka brzina povezivanja objekata, značajno nadmašujući linkere GNU gold i LLVM lld (povezivanje u Mold-u odvija se brzinom koja je samo dvostruko sporija od običnog kopiranja datoteka uz pomoć alata cp). Kod je napisan na jeziku Rust i distribucija je pod MIT licencom.
Smanjenje vremena potrebnog za povezivanje značajno poboljšava iskustvo razvoja velikih projekata skraćujući vrijeme čekanja tijekom stvaranja izvršnih datoteka prilikom ispravki i testiranja promjena. Motiv za stvaranje Molda bila je frustracija zbog potrebe za čekanjem završetka povezivanja nakon svake izmjene koda, kao i niska učinkovitost postojećih linkera na višejezgrenim sustavima te želja za isprobavanjem radikalno drugačije arhitekture povezivanja, bez korištenja prekompliciranih modela poput inkrementalnog povezivanja.
Visoka izvedba povezivanja izvršne datoteke iz velikog broja prethodno pripremljenih objekata u Mold-u postiže se korištenjem bržih algoritama, aktivnim paraleliziranjem operacija između dostupnih CPU jezgri te primjenom učinkovitijih struktura podataka. Na primjer, u Mold-u je implementirana tehnika izvođenja intenzivnih izračuna istovremeno s kopiranjem datoteka, predmemoriranjem objekata prilikom učitavanja u memoriju, korištenjem brzih hash-tablica pri razrješavanju simbola, skeniranjem tablica premještanja u zasebnom niti te deduplikacijom ponavljajućih sekcija u različitim datotekama.
Grana Mold 3.0 istaknuta je preinakom kôdne baze s C++ (C++20) na Rust jezik. Mold 3.0 može se koristiti kao prozirna zamjena za Mold 2.42.1, posljednju verziju napisanju u C++, i podržava sve ranije dostupne opcije i ciljne arhitekture. Prijelaz na Rust omogućio je zaštitu projekta od potencijalnih problema pri obradi oštećenih objektnih datoteka — u situacijama kada se C++ verzija rušila zbog pristupa memorijskim područjima izvan bafera, verzija na Rustu zaustavlja rad u fazi provjere granica. Performanse implementacije na Rustu su na istoj razini s verzijom na C++.
Osim migracije na Rust, ključni cilj pri razvoju verzije 3.0 bilo je povećanje kompatibilnosti s GNU ld i priprema projekta za mogućnost korištenja kao zadani linker u Linux distribucijama. Sustav gradnje zamijenjen je s CMake na Cargo, a sustav testiranja s ctest na cargo test. Iz ovisnosti je izostavljena biblioteka oneTBB.
Izvor: opennet.ru
