Clang: compilatore front-end di LLVM

sabato 21 aprile 2012

Clang è un compilatore per i linguaggi C, C++, Objective C ed Objective C++, sviluppato da Apple e rilasciato sotto una licenza open source ed è software libero.

Clang è un compilatore sviluppato dalla Apple al fine di rimpiazzare GNU Compiler Collection (GCC), in particolare per la bassa priorità che rivestiva l'Objective C agli occhi degli sviluppatori di GCC, oltre a problemi legati alla GNU General Public License. Esso non è altro che un front-end di LLVM (Low Level Virtual Machine). Quest'ultima è una infrastruttura di compilazione, scritta in C++, progettata per l'ottimizzazione di programmi in fase di compilazione, di linking, di esecuzione e di non utilizzo.
Il progetto LLVM è cominciato nel 2000 all'Università dell'Illinois ed attualmente supporta la compilazione di programmi in linguaggio C, C++, Objective C, Ada, e Fortran, usando dei front-end derivati dalle versioni 4.0.1. e 4.2 del compilatore GNU Compiler Collection (GCC) ed  un front-end alternativo per linguaggi di programmazione simili al C:  Clang.





Usando LLVM, il programmatore può creare una macchina virtuale per linguaggi che la richiedono (ad esempio il Java), un compilatore per una architettura specifica, e software di ottimizzazione del codice indipendenti dal tipo di linguaggio utilizzato o dalla piattaforma. La rappresentazione intermedia LLVM (IR) è indipendente sia dal linguaggio che dalla architettura; essa si interpone tra il codice sorgente in un dato linguaggio e un generatore di codice per una specifica architettura. LLVM include il supporto all'ottimizzazione del codice inter-procedurale e compilatori sia statici che Just-in-time.
Ha diversi componenti che si occupano delle diverse fasi di sviluppo; tra essi, si ricordano i frontend per il linguaggio bytecode Java, il CIL, il Python. Il compilatore just-in-time LLVM è in grado di ottimizzare parti di programma in fase di esecuzione, ed è quindi utile nei casi in cui si voglia valutare l'efficienza di una singola funzione. Grazie a questa sua particolarità, esso viene usato nella pipeline OpenGL di Mac OS X 10.5 Leopard per supportare alcune funzionalità non presenti a livello hardware.

LLVM utilizza un proprio set di istruzioni indipendente dai linguaggi di programmazione. La maggior parte delle istruzioni hanno una forma simile al Three address code. Ciascuna istruzione è strutturata in modo tale da assegnare un valore ad una determinata variabile una sola volta: questo aiuta a semplificare l'analisi delle dipendenze tra le variabili.
Ogni forma di cambiamento del tipo di una variabile o di un oggetto è effettuata attraverso l'utilizzo dell'istruzione cast. LLVM fa uso dei tipi essenziali, come ad esempio gli interi, e di 5 tipi derivati: pointer, array, vettori, strutture e funzioni. Questi tipi possono essere usati per rappresentare costrutti più complessi appartenenti a linguaggi di programmazione di alto livello. Per esempio, una classe in C++ può essere rappresentata attraverso una combinazione di strutture, funzioni e array.


Keywords: LLVM, clang, c, c++, emulatori, virtual machine, apple, Objectvie C, traduzione linguaggi, ottimizzazione, compilazione, front-end, front end, Low Level Virtual Machine


ALTRI LINK: