LLVM

Da Wikipedia, l'enciclopedia libera.
LLVM
Sviluppatore LLVM Developer Group, università dell'Illinois
Ultima versione 3.0 (1 dicembre 2011)
Sistema operativo Multipiattaforma
Linguaggio
Genere Compilatore
Licenza University of Illinois Open Source License
(Licenza libera)
Sito web llvm.org

La Low Level Virtual Machine (macchina virtuale di basso livello), generalmente nota come LLVM, è 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.

LLVM 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). Un front-end alternativo per linguaggi di programmazione simili al C è attualmente in sviluppo sotto il nome di 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.

Rappresentazione del codice[modifica | modifica wikitesto]

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.

Licenza[modifica | modifica wikitesto]

LLVM e clang sono pubblicamente disponibili sotto la University of Illinois Open Source License [1], una licenza compatibile con la GPL molto simile alla licenza BSD.

Note[modifica | modifica wikitesto]


Voci correlate[modifica | modifica wikitesto]

Collegamenti esterni (in inglese)[modifica | modifica wikitesto]

informatica Portale Informatica: accedi alle voci di Wikipedia che trattano di informatica