mold 3.0: villámgyors linker, immár teljesen Rustban újraírva

enlightened Ez az oldal a közösségért készül. heart Kövess minket máshol is:  Linux Mint Magyar Közösség a Mastodon-on  Telegram csatorna – csak hírek  Beszélgessünk a Telegram – Linux csevegő csoport  Hírek olvasása RSS segítségével  Linux Mint Hivatalos Magyar Közösség a Facebook-on      Linux Mint Baráti Kör a Facebook-on
wink Ha hasznosnak találod, és szeretnéd, hogy folytatódjon, támogasd a munkát Ko-fi vagy Paypal segítségével. laugh

kami911 képe

A nagy sebességű mold linker, amely a meglévő Unix linkerek nagy teljesítményű, csereszabatos alternatívája a build folyamatok felgyorsítására, elérte a 3.0-s verziót. Ez fontos mérföldkő, mert ezzel lezárult a projekt átállása C++-ról Rust-ra. A mold fejlesztője Rui Ueyama, az LLVM lld linkerének eredeti szerzője.

A fejlesztők szerint a mold 3.0 az első kiadás, amely már az új Rust megvalósításra épül, míg a 2.42.1-es verzió marad az utolsó kiadás, amelyet a régi C++ kódbázisból építettek.

A mold 3.0 ugyanazokat a parancssori kapcsolókat fogadja el, ugyanazokat a célarchitektúrákat támogatja, és azonos kimenetet kell adnia, leszámítva a mostani kiadásban szereplő hibajavításokat. A fejlesztők szerint a linkelés teljesítménye továbbra is tartja a lépést az előző, C++-alapú verzióval.

Az átállás Rust-ra javítja a mold viselkedését sérült bemeneti fájlok esetén is. A korábbi, C++-es megvalósításban az érvénytelen adatok hatására a program a memórián kívülre olvashatott, ami szegmentálási hibához vezetett. A Rust-as verzióban ezekhez a hozzáférésekhez tartozik határellenőrzés, így a mold a hibás műveletnél leáll.

Fontos változás a forrásból fordítóknak is. A projekt CMake-ről Cargo-ra váltott, így mostantól egy C fordító mellett Rust 1.95 vagy újabb verzióra van szükség. A korábbi CMake-alapú konfigurációs lehetőségek megszűntek, a célplatform kiválasztását most már Cargo-funkciók kezelik.

Ezzel párhuzamosan a mold elhagyta a oneTBB függőséget. Továbbra is statikusan linkeli a mimallocot alapértelmezés szerint, de a linker fordításakor választható a rendszer memóriakezelője is.

A Rust-as újraíráson túl a mold 3.0 számos kompatibilitási fejlesztést és hibajavítást tartalmaz. Javították többek között a statikusan linkelt végrehajtható állományokhoz és version scriptekhez kapcsolódó összeomlásokat, a sérült kimenetet, amikor egy kimeneti fájlt bemenetként is használnak, több nem determinisztikus kimeneti esetet, valamint több, a -r opcióval végzett relokálható linkelést érintő problémát.

Javult a kompatibilitás a GNU ld-vel is több területen, például a parancssori opciók értelmezésében, a szimbólumverziók kezelésében és a relokációs viselkedésben. Olyan esetekben, ahol korábban hibás kimenet vagy összeomlás történt, most már szabályos hibaüzenettel utasítja el a mold a műveletet.

Architektúraspecifikus javítások is érkeztek AArch64, ARM32, i386, RISC-V, LoongArch, PPC32, PPC64, m68k, SH4 és SPARC64 platformokra. A kiadás további relokációtípusok támogatását is hozzáadja AArch64 és ARM32 esetén, és több relokációs és TLS-sel kapcsolatos problémát is megold RISC-V és LoongArch architektúrákon.

Előre tekintve a mold fejlesztői szerint a 3.x sorozat fő célja, hogy bezárja a még meglévő kompatibilitási rést a GNU ld-hez képest, különösen a linker scriptek területén. Hosszabb távon abban bíznak, hogy ez az irány segít abban, hogy a moldat a Linux disztribúciók alapértelmezett linkernek válasszák.

A mold 3.0-val kapcsolatos további részletek a kiadás changelogjában olvashatók.