A fost publicat release-ul compozitorului Mold 3.0, care poate fi utilizat ca o alternativă mai rapidă și transparentă la GNU linker pe sisteme Linux. Proiectul este dezvoltat de Rui Ueyama, autorul linkerului LLVM lld. Caracteristica cheie a Mold este viteza extrem de mare de legare a fișierelor obiect, depășind cu mult compozitorii GNU gold și LLVM lld (legarea în Mold se efectuează cu o viteză de doar două ori mai lentă decât simpla copiere a fișierelor cu utilitarul cp). Codul este scris în Rust și este distribuit sub licența MIT.
Reducerea timpului de legare permite o creștere semnificativă a convenienței dezvoltării proiectelor mari prin scurtarea așteptării în procesul de generare a fișierelor executabile în timpul depanării și testării modificărilor. Motivația pentru crearea Mold a fost frustrarea cauzată de necesitatea de a aștepta finalizarea legării după fiecare modificare adusă codului, precum și eficiența redusă a compozitorilor existenți pe sisteme multicore și dorința de a încerca o arhitectură de legare fundamental diferită, fără a recurge la modele excesiv de complicate, cum ar fi legarea incrementală.
Performanța ridicată a legării fișierului executabil dintr-un număr mare de fișiere obiect pregătite de compilator în Mold este obținută prin utilizarea unor algoritmi mai rapizi, paralele active între nucleele CPU disponibile și aplicarea unor structuri de date mai eficiente. De exemplu, în Mold este implementată o tehnică de execuție a calculilor intensive simultan cu copierea fișierelor, preîncărcarea fișierelor obiect în memorie, utilizarea unor tabele de dispersie rapide la rezolvarea simbolurilor, scanarea tabelelor de relocare într-un fir separat și deduplicarea secțiunilor repetate în diferite fișiere.
Ramura Mold 3.0 se remarcă prin refacerea bazei de cod din C++ (C++20) în limbajul Rust. Mold 3.0 poate fi utilizat ca înlocuire transparentă a Mold 2.42.1, ultima versiune în C++, și suportă toate opțiunile și arhitecturile țintă disponibile anterior. Trecerea la Rust a permis securizarea proiectului împotriva posibilelor probleme la procesarea fișierelor obiect deteriorate — în situațiile în care versiunea în C++ se termina brusc din cauza accesării zonelor de memorie dincolo de buffer, varianta în Rust oprește funcționarea în faza de verificare a limitelor. Performanța implementării în Rust este comparabilă cu versiunea în C++.
Pe lângă migrarea la Rust, un obiectiv cheie în dezvoltarea ramurii 3.0 a fost creșterea compatibilității cu GNU ld și pregătirea proiectului pentru a putea fi utilizat ca linker implicit în distribuțiile Linux. Sistemul de construire a fost înlocuit de la CMake la Cargo, iar sistemul de teste de la ctest la cargo test. Biblioteca oneTBB a fost exclusă din dependențe.
Sursa: opennet.ro
