Rilascio del layout Mold 3.0, sviluppato dal team di LLVM lld

È stata pubblicata la versione 3.0 del linker Mold, che può essere utilizzata come una sostituzione trasparente più veloce del linker GNU sui sistemi Linux. Il progetto è sviluppato da Rui Ueyama, autore del linker LLVM lld. La caratteristica principale di Mold è l'altissima velocità di collegamento dei file oggetto, che supera notevolmente quella dei linker GNU gold e LLVM lld (il collegamento in Mold avviene a una velocità solo il doppio più lenta della semplice copia di file con l'utilità cp). Il codice è scritto in Rust ed è distribuito con licenza MIT.

La riduzione del tempo di collegamento consente di aumentare significativamente la facilità di sviluppo di grandi progetti, grazie alla diminuzione dei tempi di attesa nella creazione di file eseguibili durante il debug e il testing delle modifiche. La motivazione per la creazione di Mold è stata l'esasperazione per dover attendere il completamento del collegamento dopo ogni modifica del codice, oltre all'inefficienza dei linker esistenti su sistemi multicore e il desiderio di provare un'architettura di collegamento sostanzialmente diversa, senza ricorrere a modelli eccessivamente complessi come il collegamento incrementale.

L'elevata performance del collegamento di un file eseguibile da un gran numero di file oggetto preparati dal compilatore in Mold è raggiunta utilizzando algoritmi più veloci, attivando il parallelismo tra i core CPU disponibili e impiegando strutture dati più efficienti. Ad esempio, in Mold è implementata una tecnica di esecuzione di calcoli intensivi contemporaneamente alla copia dei file, il caricamento anticipato dei file oggetto in memoria, l'uso di tabelle hash veloci per la risoluzione dei simboli, la scansione delle tabelle delle relocazioni in un thread separato e la deduplicazione delle sezioni ripetute in diversi file.

La versione Mold 3.0 si distingue per la riscrittura della base di codice da C++ (C++20) a Rust. Mold 3.0 può essere utilizzato come sostituzione trasparente di Mold 2.42.1, l'ultima versione in C++, e supporta tutte le opzioni precedentemente disponibili e le architetture di destinazione. Il passaggio a Rust ha permesso di mettere al sicuro il progetto da potenziali problemi durante la gestione di file oggetto danneggiati: quando la versione C++ terminava erroneamente a causa di accessi a aree di memoria oltre il buffer, la versione Rust ferma il processo in fase di verifica dei limiti. Le prestazioni dell'implementazione in Rust sono paragonabili a quelle della versione C++.

Oltre alla migrazione a Rust, l'obiettivo principale nello sviluppo della versione 3.0 era migliorare la compatibilità con GNU ld e preparare il progetto per poter essere utilizzato come linker predefinito nelle distribuzioni Linux. Il sistema di build è stato sostituito da CMake a Cargo, e il sistema di test da ctest a cargo test. La libreria oneTBB è stata rimossa dalle dipendenze.

Fonte: opennet.ru

Acquista hosting affidabile per siti web con protezione DDoS, server VPS VDS 🔥 Acquista hosting affidabile per siti web con protezione DDoS, server VPS VDS - ProHoster