1. Parte 1
Strumenti per la
generazione di eseguibili
Linguaggi dinamici – A.A. 2009/2010
1
2. Compilatori ed interpreti
„ Esistono diversi strumenti per la generazione
di codice eseguibile
„ Tali strumenti sono classificabili in due
categorie distinte:
„ Compilatori
„ Interpreti
„ I due strumenti non si escludono
necessariamente!
„ Alcuni linguaggi sono compilati
g gg p
„ Alcuni linguaggi sono interpretati
„ Alcuni linguaggi sono compilati ed interpretati
Linguaggi dinamici – A.A. 2009/2010
2
3. Compilatore
„ Un compilatore è un software che traduce
testo scritto in un linguaggio di
programmazione (codice sorgente) in un altro
linguaggio di programmazione (codice
guagg o d p og a a o e (cod ce
oggetto), solitamente a più basso livello
„ Classico esempio: C Æ codice macchina
„ Le operazioni di traduzione sono svolte in una
sequenza di task ben precisa
Linguaggi dinamici – A.A. 2009/2010
3
4. Compilatore
„ Operazioni svolte da un compilatore
„ Preprocessing: il testo del codice sorgente
viene trasformato prima della compilazione
„ Analisi l
A li i lessicale: il testo del codice sorgente
i l t t d l di t
viene diviso in porzioni con senso sintattico
(token); viene generata una “rappresentazione
rappresentazione
intermedia” del codice
„ Generazione del codice: la rappresentazione
intermedia viene tradotta nel formato finale
„ Ottimizzazione del codice: il codice risultante
viene ottimizzato secondo un qualche criterio
Linguaggi dinamici – A.A. 2009/2010
4
5. Compilatore: analisi sintattica
„ Obiettivo: produrre una tabella di token con il
loro significato
„ Token: è un blocco di testo categorizzato
(ossia,
(ossia avente un significato ben preciso nella
sintassi del linguaggio)
„ Esempio: la seguente operazione (sum=3+2),
E i l t i ( 3 2)
produce la seguente tabella
Token Categoria
sum IDENTIFIER
= ASSIGN_OP
ASSIGN OP
3 NUMBER
+ ADD_OPERATOR
_
2 NUMBER
Linguaggi dinamici – A.A. 2009/2010
5
6. Compilatore: analisi sintattica
„ L'analisi sintattica avviene tramite i processi di
scanning e di tokenization
„ Scanner: macchina a stati finiti che riconosce
possibili token
„ Es.: un intero è un (possibile) carattere +/-
seguito da una sequenza di digit
it d di it
„ Tokenizer: classificazione dei singoli blocchi
individuati tramite lo scanner
Linguaggi dinamici – A.A. 2009/2010
6
7. Compilatore: generazione del codice
„ La generazione del codice si preoccupa di
trasformare il formato intermedio in quello
finale, che può essere eseguito direttamente
da ca co ato e
dal calcolatore
„ L'input al modulo di generazione di codice è la
rappresentazione intermedia:
„ Parse tree
„ Abstract S t T
Ab t t Syntax Tree
„ Tale rappresentazione viene convertita in una
sequenza di istruzioni (che può ancora essere
intermedia)
Linguaggi dinamici – A.A. 2009/2010
7
8. Compilatore: generazione del codice
„ La generazione del codice avviene attraverso I
processi di instruction selection, instruction
selection
scheduling e register allocation
„ Instruction selection: vengono scelte le
istruzioni da utilizzare per la conversione
„ Instruction scheduling: si sceglie la sequenza
I t ti h d li i li l
in cui tali istruzioni vengono piazzate
(ottimizzazione per l CPU in pipeline)
( tti i i le i i li )
„ Register allocation: si decide come allocare le
variabili ai registri della CPU
Linguaggi dinamici – A.A. 2009/2010
8
9. Compilazione Just In Time
„ La generazione del codice può avvenire in due
fasi distinte:
„ a tempo di compilazione (compilation time)
„ attempo di esecuzione (run time)
i ( ti )
„ In quest'ultimo caso, si parla di Compilazione
Just In Time (JIT)
„ Viene anche chiamata dynamic translation
„ Utilizzata da JAVA
Linguaggi dinamici – A.A. 2009/2010
9
10. Interprete
„ Un interprete è un software che prende
porzioni ben definite (statement) di un testo
scritto in un linguaggio di programmazione
(cod ce sorgente), e traduce u a t o
(codice so ge te), le t aduce in un altro
linguaggio di programmazione (codice
oggetto) e le esegue
gg ) g
„ Non viene prodotto un programma eseguibile;
il programma scritto rimane nel codice
sorgente del linguaggio interpretato
Linguaggi dinamici – A.A. 2009/2010
10
11. Linguaggi interpretati vs. compilati
„ Vantaggi di un linguaggio interpretato:
„ È molto più semplice da correggere, dal
correggere
momento che l'esecuzione avviene uno
statement alla volta
„ Maggiore portabilità
„ Svantaggi di un linguaggio interpretato:
S t i li i i t t t
„ È molto più lento nell'esecuzione
(traduzione a run time di uno statement alla
volta)
„ Richiede la presenza del software interprete sul
calcolatore
Linguaggi dinamici – A.A. 2009/2010
11
12. Parte 1
Architettura di un
linguaggio dinamico
Linguaggi dinamici – A.A. 2009/2010
12
13. Modelli di riferimento
„ La totalità dei linguaggi dinamici moderni mira
alla portabilità; a tal scopo adotta un formato
scopo,
di rappresentazione del codice indipendente
da a a c tettu a
dalla architettura
„ A seconda del tipo di formato, si distinguono
due diversi modelli di esecuzione:
„ Modello “Bytecode”
„ Modello “Ab t
M d ll “Abstract S t T
t Syntax Tree”
”
Linguaggi dinamici – A.A. 2009/2010
13
14. Modello “Bytecode”
„ Il modello bytecode prevede l'utilizzo di
distinti moduli software: un compilatore un
compilatore,
interprete ed una macchina virtuale
„ Compilatore:
„ Traduce il codice sorgente in una
rappresentazione a più basso livello portabile
livello,
ed ottimizzabile (bytecode)
„ Parecchi linguaggi hanno la possibilità di
operare una compilazione Just-In-Time
Linguaggi dinamici – A.A. 2009/2010
14
15. Modello “Bytecode”
„ Il modello bytecode prevede l'utilizzo di
distinti moduli software: un compilatore un
compilatore,
interprete ed una macchina virtuale
„ Interprete:
„ Prende singole sequenze di bytecode e le
traduce in operazioni da eseguire sul
calcolatore
„ Queste sequenze possono essere interpretate o
compilate in codice macchina (JIT)
Linguaggi dinamici – A.A. 2009/2010
15
16. Modello “Bytecode”
„ Il modello bytecode prevede l'utilizzo di
distinti moduli software: un compilatore un
compilatore,
interprete ed una macchina virtuale
„ Macchina virtuale:
„ Fornisce una astrazione di un sistema operativo
„ Traduce le richieste di sistema (scritte in un
T d l i hi i ( i i
linguaggio portabile) nelle richieste concrete al
vero sistema operativo
„ Le funzionalità di base della macchina virtuale
sono contenute nella libreria di funzioni detta
t t ll lib i f i i d tt
runtime library
„ Runtime library + MV = Runtime Environment
R ti lib R ti E i t
Linguaggi dinamici – A.A. 2009/2010
16
17. Modello “Abstract Syntax Tree”
„ Il modello abstract syntax tree prevede
l utilizzo
l'utilizzo di un compilatore e di un interprete
„ Compilatore:
„ Traduce il codice sorgente in una
T d di t i
rappresentazione ad albero sintattico (Abstract
Syntax Tree)
„ Durante la fase di compilazione può essere
inserita una fase di compilazione ed
interpretazione di codice (inizializzazione)
„ Bl
Blocchi BEGIN/END
hi
Linguaggi dinamici – A.A. 2009/2010
17
18. Modello “Abstract Syntax Tree”
„ Il modello abstract syntax tree prevede
l utilizzo
l'utilizzo di un compilatore e di un interprete
„ Interprete:
„ Esegue uno statement di codice (tramite
E t t t di (t it
algoritmi di visita sull'albero sintattico)
„ Può
P ò essere inserita una fase di compilazione
i i f il i
durante l'interpretazione
„ Comando eval()
Linguaggi dinamici – A.A. 2009/2010
18