Megjelent a Mold 3.0 linkelő, amely gyorsabb átlátszó helyettesítése lehet a GNU linkernek Linux rendszereken. A projektet Rui Ueyama fejleszti, aki az LLVM lld linkelő szerzője. A Mold kulcsfontosságú jellemzője a nagyon magas sebesség, amellyel az objektumfájlok összekapcsolódnak, jelentősen megelőzve a GNU gold és LLVM lld linkelőket (a Mold használatával a linkelés sebessége mindössze kétszer lassabb, mint a fájlok egyszerű másolása a cp eszközzel). A kód Rust nyelven készült, és MIT licenc alatt terjesztik.
A linkelési idő csökkentése lehetővé teszi a nagyméretű projektek fejlesztési kényelmének jelentős növelését az végrehajtható fájlok létrehozásának várakozási idejének csökkentésével a hibakeresés és a változtatások tesztelése során. A Mold létrehozásának motivációja az volt, hogy megszüntesse a kód módosítása után a linkelés befejezésére való várakozás irritációját, valamint a meglévő linkelők alacsony hatékonyságát a többmagos rendszereken, és hogy kipróbáljon egy alapvetően eltérő linkelési architektúrát, anélkül, hogy túl bonyolult modellekhez, például inkrementális linkeléshez folyamodna.
A végrehajtható fájlok készítése a Moldban a lefordított objektumfájlok nagy számából a magasabb teljesítmény elérése érdekében gyorsabb algoritmusok használatával, a műveletek aktív párhuzamosítása a rendelkezésre álló CPU-magok között, és hatékonyabb adatszerkezetek alkalmazása révén történik. Például a Moldban megvalósították a számítási igényes feladatok párhuzamos végrehajtását a fájlok másolása mellett, az objektumfájlok előzetes memóriába töltését, gyors hash-táblák használatát a szimbólumok feloldásához, a mozgáslisták szkennelését külön szálon és a különböző fájlokban található összekapcsolandó szakaszok deduplikálását.
A Mold 3.0 a C++ (C++20) kódalap újraírásával készült Rust nyelven. A Mold 3.0 átlátható helyettesítése a Mold 2.42.1-nek, a legutolsó C++ nyelvű kiadásnak, és támogatja az összes korábban elérhető opciót és célarchitektúrát. A Rust-ra való áttérés lehetővé tette a projekt védelmét a sérült objektumfájlok feldolgozásával kapcsolatos potenciális problémák ellen – olyan helyzetekben, amikor a C++-os verzió összeomlott a memória bufferén túl történő hivatkozások miatt, a Rust-os verzió megáll a határok ellenőrzésének szakaszában. A Rust implementáció teljesítménye megegyezik a C++-os verzióval.
A Rust-ra való migráción kívül a 3.0-ás ágon a fő cél a GNU ld-vel való kompatibilitás növelése és a projekt alapértelmezett linker-ként való használatra való előkészítése a Linux disztribúciókban. Az építési rendszer a CMake-ről Cargo-ra váltott, a tesztelési rendszer pedig a ctest-ről cargo test-re. Az oneTBB könyvtárat eltávolították a függőségekből.
Forrás: opennet.ru
