Rilasciata la prima versione stabile di mold, un linker velocissimo per le compilazioni

Il codice sorgente di un software ricade in due categorie, compilato e interpretato. Usando un linguaggio compilato (C o C++, per esempio) ci sono varie fasi per passare dal codice sorgente al file eseguibile binario. Tutte insieme sono genericamente indicate come “compilazione”, ma in realtà ogni passo è eseguito da un programma dedicato. Non è un caso che GCC stia per GNU Compiler Collection (collezione GNU per la compilazione), e il concetto di collezione non si limita ai linguaggi usabili.

Semplificando le fasi principali sono due.
Nella prima il compilatore traduce ogni file sorgente in un binario non eseguibile, il cosiddetto file oggetto.
Nella seconda il linker riunisce gli oggetti nell’ordine giusto per creare il file voluto, sia esso una libreria o un eseguibile.

Come potete ben immaginare, questa è una delle fasi più complesse e critiche: non solo si produce il file finale, ma la cosa riguarda l’intero programma. E nel caso di applicazioni complesse il tempo impegnato in questa fase cresce rapidamente, talvolta esponenzialmente col numero di file coinvolti.

Già nel 2008, per ovviare ai lunghi tempi, un team di Google propose il linker GOLD, ed entrato in poco tempo negli strumenti disponibili in GCC come rimpiazzo del classico “ld”. Nel 2016 il team di LLVM (un’alternativa a GCC) propose LLD, che migliorava i tempi rispetto a GOLD. Talmente tanto che Google stessa l’ha rapidamente adottato.
Da maggio 2021 uno di quegli stessi sviluppatori di LLVM propone mold (muffa), che promette dei miglioramenti altrettanto sostanziali. Ed ora è disponibile nella prima versione stabile, la 1.0.

Confronto tempi di compilazione - dalla pagina GitHub del progetto
Confronto tempi di compilazione – dalla pagina GitHub del progetto

In particolare la maggior rapidità è dato dal maggior parallelismo ottenibile: se GOLD la maggior parte del tempo lavora su una sola CPU, mold lavora quasi sempre usando tutti i processori. E su macchine particolarmente dotate (come quella presentata qui sotto e limitata all’uso di 16 core) la differenza può essere davvero notevole.

Confronto uso delle CPU - dalla pagina GitHub del progetto
Confronto uso delle CPU – dalla pagina GitHub del progetto

Ovviamente il vantaggio lo vedranno principalmente gli sviluppatori – e non è cosa da poco. Poter compilare e verificare l’efficacia delle proprie modifiche in pochi secondi invece che in alcuni minuti può fare la differenza in termini di produttività.
L’altra categoria di utenti che ne beneficerà sono quelli che compilano il proprio software. E sì, da ex utente Gentoo sto pensando proprio a loro!

Ho coltivato la mia passione per l'informatica fin da bambino, coi primi programmi BASIC. In età adulta mi sono avvicinato a Linux ed alla programmazione C, per poi interessarmi di reti. Infine, il mio hobby è diventato anche il mio lavoro.
Per me il modo migliore di imparare è fare, e per questo devo utilizzare le tecnologie che ritengo interessanti; a questo scopo, il mondo opensource offre gli strumenti perfetti.

Tags: ,