Vydání linkeru Mold 3.0, rozvíjeného vývojářem LLVM lld

Bylo zveřejněno vydání linkeru Mold 3.0, který lze použít jako rychlejší transparentní alternativu GNU linkeru na systémech Linux. Projekt rozvíjí Rui Ueyama, autor linkeru LLVM lld. Klíčovou vlastností Mold je velmi vysoká rychlost linkování objektových souborů, která výrazně převyšuje linkery GNU gold a LLVM lld (linkování v Mold probíhá rychlostí, která je jen dvakrát pomalejší než jednoduché kopírování souborů pomocí utilitární cp). Kód je napsán v jazyce Rust a distribuuje se pod licencí MIT.

Snížení času potřebného na linkování výrazně zvyšuje pohodlí vývoje velkých projektů díky zkracování čekání při tvorbě spustitelných souborů během ladění a testování změn. Motivací k vytvoření Mold bylo rozčilení z nutnosti čekat na dokončení linkování po každé změně v kódu, stejně jako nízká efektivita práce stávajících linkerů na vícejádrových systémech a touha vyzkoušet zásadně odlišnou architekturu linkování, aniž by se tím použily zbytečně složité modely, jako je inkrementální linkování.

Vysoký výkon linkování spustitelného souboru z velkého počtu objektových souborů připravených kompilátorem v Mold je dosažen použitím rychlejších algoritmů, aktivním paralelizováním operací mezi dostupnými jádry CPU a aplikací efektivnějších datových struktur. Například v Mold je implementována technika provádění intenzivních výpočtů současně s kopírováním souborů, prediktivní načítání objektových souborů do paměti, použití rychlých hash tabulek při odstraňování symbolů, skenování tabulek přesměrování v samostatném vlákně a deduplikace opakujících se v různých souborech slučovaných sekcí.

Verze Mold 3.0 se vyznačuje přepsáním kódové základny z C++ (C++20) na jazyk Rust. Mold 3.0 může sloužit jako transparentní náhrada Mold 2.42.1, poslední verze v jazyce C++, a podporuje všechny dříve dostupné možnosti a cílové architektury. Přechod na Rust umožnil zabezpečit projekt před potenciálními problémy při zpracování poškozených objektových souborů — v situacích, kdy verze v C++ havarovala kvůli přístupu do oblastí paměti mimo buffer, verze v Rustu zastaví činnost při kontrole hranic. Výkon implementace v Rustu je na úrovni verze v C++.

Kromě migrace na Rust bylo klíčovým cílem při vývoji verze 3.0 zvýšení kompatibility s GNU ld a příprava projektu na možnost použití jako výchozího linkeru v distribucích Linux. Systém sestav byl nahrazen z CMake na Cargo a testovací systém byl vyměněn z ctest na cargo test. Knihovna oneTBB byla vyřazena ze závislostí.

Zdroj: opennet.ru

Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster