Megjelent a Mold 3.0 linker, amely a GNU linker gyorsabb és átláthatóbb helyettesítőjeként használható. Linux-rendszerek. A projektet Rui Ueyama, az LLVM lld linker szerzője fejleszti. A Mold legfontosabb jellemzője a rendkívül magas linkelési sebesség, amely jelentősen felülmúlja a GNU gold és az LLVM lld linkereket (a Moldban a linkelés csak fele olyan gyors, mint a fájlok egyszerű másolása a cp segédprogrammal). A kód Rust nyelven íródott és MIT licenc alatt kerül terjesztésre.
A csatolási idő csökkentése jelentősen javítja a nagy projektek használhatóságát azáltal, hogy csökkenti a várakozási időt a végrehajtható fájlok generálása során a hibakeresés és a változtatások tesztelése során. A Mold létrehozásának motivációja az volt, hogy minden kódmódosítás után meg kellett várni a csatolás befejeződését, a meglévő linkerek gyenge teljesítménye a többmagos rendszereken, valamint az a vágy, hogy alapvetően eltérő csatolási architektúrát próbáljanak ki anélkül, hogy túlságosan összetett modellekhez, például az inkrementális csatoláshoz folyamodnának.
A Mold nagy teljesítményt ér el a végrehajtható fájlok nagyszámú, fordítóprogram által előkészített objektumfájlból történő fordításában gyorsabb algoritmusok használatával, a műveletek aktív párhuzamosításával a rendelkezésre álló CPU-magok között, és hatékonyabb adatstruktúrák alkalmazásával. A Mold például egy olyan technikát valósít meg, amely intenzív számításokat végez a fájlmásolással egyidejűleg, megelőző jelleggel betölti az objektumfájlokat a memóriába, gyors hash-táblákat használ a szimbólumok feloldásához, áthelyezési táblázatokat szkennel egy külön szálon, és deduplikálja a duplikált egyesített szakaszokat a különböző fájlok között.
A Mold 3.0 ág figyelemre méltó a kódbázis C++-ról (C++20) Rust-ra való átírásáról. A Mold 3.0 transzparens helyettesítőjeként használható a Mold 2.42.1-nek, a legutóbbi C++ 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 kezelésekor fellépő potenciális problémákkal szemben – olyan helyzetekben, amikor a C++ verzió a határokon kívüli hozzáférés miatt összeomlott, a Rust implementációja a határok ellenőrzési szakaszában leáll. A Rust implementáció teljesítménye a C++ verzióéval megegyező.
A Rustra való migrálás mellett a 3.0 ág fejlesztésének egyik fő célja a GNU ld-vel való kompatibilitás javítása és a projekt felkészítése a disztribúciókban alapértelmezett linkerként való használatra. LinuxA build rendszert a Cargo váltotta fel, a tesztelési rendszert pedig a cargo test váltotta fel, amely a ctest helyét vette át. A oneTBB könyvtárat eltávolították a függőségek közül.
Forrás: opennet.ru
