T2 architettura

686 views

Published on

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
686
On SlideShare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
6
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

T2 architettura

  1. 1. Parte 1 Strumenti per la generazione di eseguibili Linguaggi dinamici – A.A. 2009/2010 1
  2. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 12. Parte 1 Architettura di un linguaggio dinamico Linguaggi dinamici – A.A. 2009/2010 12
  13. 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. 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. 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. 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. 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. 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

×