Publicēts kompilatora Mold 3.0 izlaidums, kas var tikt izmantots kā ātrāka un caurspīdīgāka GNU linker aizvietošana Linux sistēmās. Projektu attīsta Rui Ueyama, LLVM lld kompilatora autors. Galvenā Mold iezīme ir ļoti augsta objektu failu savienošanas ātrums, kas ievērojami pārsniedz GNU gold un LLVM lld kompilatoru ātrumu (savienošana Mold tiek veikta ar ātrumu, kas ir tikai divreiz lēnāks par parasto failu kopēšanu, izmantojot cp utilītu). Kods rakstīts Rust valodā un tiek izplatīts ar MIT licenci.
Savienošanas laika samazināšana ļauj ievērojami uzlabot lielu projektu izstrādes ērtumu, samazinot gaidīšanas laiku izpildfailu veidošanas procesā, kad tiek veikta atkļūdošana un izmaiņu testēšana. Motivācija Mold izstrādei bija neapmierinātība ar nepieciešamību gaidīt savienošanas pabeigšanu pēc katras izmaiņas kodā, kā arī esošo kompilatoru zema efektivitāte daudzkodolu sistēmās un vēlme izmēģināt principiāli jaunu savienošanas arhitektūru, neizmantojot pārāk sarežģītus modeļus, piemēram, inkrementālu savienošanas procesu.
Augsta izpildfaila savienošanas veiktspēja no liela skaita kompilatora sagatavotu objektu failiem Mold tiek panākta, izmantojot ātrākus algoritmus, aktīvi paralēlizējot darbības starp pieejamajiem CPU kodoliem un pielietojot efektīvākas datu struktūras. Piemēram, Mold ir īstenota intensīvas aprēķināšanas tehnikas realizācija vienlaikus ar failu kopēšanu, objektu failu iepriekšēja ielāde atmiņā, ātru hash tabulu izmantošana simbolu izšķiršanai, pārvietojumu tabulu skenēšana atsevišķā pavedienā un atkārtotu apvienojamo sekciju deduplication plusieurs failos.
Mold 3.0 ir izcila ar to, ka kode bāze ir pārveidota no C++ (C++20) uz Rust. Mold 3.0 var tikt izmantots kā caurspīdīgs aizvietotājs Mold 2.42.1, pēdējai versijai C++, un atbalsta visas iepriekš pieejamās opcijas un mērķa arhitektūras. Pāreja uz Rust ir ļāvusi droši apstrādāt bojātus objektu failus — situācijās, kad C++ versija avarēja, piekļūstot atmiņas apgabaliem ārpus bufera, Rust versija apstājas robežu pārbaudes posmā. Veiktspēja Rust realizācijā ir līdzvērtīga C++ versijai.
Papildus migrācijai uz Rust, galvenais mērķis 3.0 izstrādē bija paaugstināt saderību ar GNU ld un sagatavot projektu, lai to varētu izmantot kā noklusējuma saistītāju Linux izplatījumu ietvarā. Apkopošanas sistēma tika aizvietota no CMake uz Cargo, un testēšanas sistēma no ctest uz cargo test. OneTBB bibliotēka ir izslēgta no atkarībām.
Avots: opennet.lv
