SlideShare une entreprise Scribd logo
1  sur  18
Télécharger pour lire hors ligne
Parte 1




              Strumenti per la
          generazione di eseguibili




Linguaggi dinamici – A.A. 2009/2010
                                      1
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
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
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
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
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
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
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
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
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
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
Parte 1




                   Architettura di un
                 linguaggio dinamico




Linguaggi dinamici – A.A. 2009/2010
                                        12
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
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
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
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
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
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

Contenu connexe

Tendances

Caratteristiche del linguaggio c
Caratteristiche del linguaggio cCaratteristiche del linguaggio c
Caratteristiche del linguaggio cughetta
 
06 - Programmazione: Scope Variabili
06 - Programmazione: Scope Variabili06 - Programmazione: Scope Variabili
06 - Programmazione: Scope VariabiliMajong DevJfu
 
01 - Programmazione: Dai Problemi ai Programmi
01 - Programmazione: Dai Problemi ai Programmi01 - Programmazione: Dai Problemi ai Programmi
01 - Programmazione: Dai Problemi ai ProgrammiMajong DevJfu
 
Linguaggi di programmazione
Linguaggi di programmazioneLinguaggi di programmazione
Linguaggi di programmazionedibari.92
 
Linguaggi Formali e Compilazione: Parsing
Linguaggi Formali e Compilazione: ParsingLinguaggi Formali e Compilazione: Parsing
Linguaggi Formali e Compilazione: ParsingMajong DevJfu
 
13 - Programmazione: Compendio C - C++
13 - Programmazione: Compendio C - C++13 - Programmazione: Compendio C - C++
13 - Programmazione: Compendio C - C++Majong DevJfu
 
08 - Programmazione: Passaggio valori tra funzioni per riferimenti
08 - Programmazione: Passaggio valori tra funzioni per riferimenti08 - Programmazione: Passaggio valori tra funzioni per riferimenti
08 - Programmazione: Passaggio valori tra funzioni per riferimentiMajong DevJfu
 
Analizzatori di programmi in C
Analizzatori di programmi in CAnalizzatori di programmi in C
Analizzatori di programmi in CBoymix81
 

Tendances (15)

T8 supporti
T8 supportiT8 supporti
T8 supporti
 
Caratteristiche del linguaggio c
Caratteristiche del linguaggio cCaratteristiche del linguaggio c
Caratteristiche del linguaggio c
 
06 - Programmazione: Scope Variabili
06 - Programmazione: Scope Variabili06 - Programmazione: Scope Variabili
06 - Programmazione: Scope Variabili
 
T3 esempio runtime
T3 esempio runtimeT3 esempio runtime
T3 esempio runtime
 
T4 tipizzazione
T4 tipizzazioneT4 tipizzazione
T4 tipizzazione
 
01 - Programmazione: Dai Problemi ai Programmi
01 - Programmazione: Dai Problemi ai Programmi01 - Programmazione: Dai Problemi ai Programmi
01 - Programmazione: Dai Problemi ai Programmi
 
Linguaggi di programmazione
Linguaggi di programmazioneLinguaggi di programmazione
Linguaggi di programmazione
 
Pe t1 perl-intro
Pe t1 perl-introPe t1 perl-intro
Pe t1 perl-intro
 
T7 librerie
T7 librerieT7 librerie
T7 librerie
 
Linguaggi di programmazione
Linguaggi di programmazioneLinguaggi di programmazione
Linguaggi di programmazione
 
Linguaggi Formali e Compilazione: Parsing
Linguaggi Formali e Compilazione: ParsingLinguaggi Formali e Compilazione: Parsing
Linguaggi Formali e Compilazione: Parsing
 
3 Linguaggioc
3   Linguaggioc3   Linguaggioc
3 Linguaggioc
 
13 - Programmazione: Compendio C - C++
13 - Programmazione: Compendio C - C++13 - Programmazione: Compendio C - C++
13 - Programmazione: Compendio C - C++
 
08 - Programmazione: Passaggio valori tra funzioni per riferimenti
08 - Programmazione: Passaggio valori tra funzioni per riferimenti08 - Programmazione: Passaggio valori tra funzioni per riferimenti
08 - Programmazione: Passaggio valori tra funzioni per riferimenti
 
Analizzatori di programmi in C
Analizzatori di programmi in CAnalizzatori di programmi in C
Analizzatori di programmi in C
 

En vedette

Pe a1 perl-unit_testing
Pe a1 perl-unit_testingPe a1 perl-unit_testing
Pe a1 perl-unit_testingMajong DevJfu
 
Corso Python Django
Corso Python DjangoCorso Python Django
Corso Python Djangobarmassimo
 
Py a2 python-documentazione
Py a2 python-documentazionePy a2 python-documentazione
Py a2 python-documentazioneMajong DevJfu
 
Py a3 python-metaprogramming
Py a3 python-metaprogrammingPy a3 python-metaprogramming
Py a3 python-metaprogrammingMajong DevJfu
 
Pe a2 perl-documentazione
Pe a2 perl-documentazionePe a2 perl-documentazione
Pe a2 perl-documentazioneMajong DevJfu
 
Pe a3 perl-metaprogramming
Pe a3 perl-metaprogrammingPe a3 perl-metaprogramming
Pe a3 perl-metaprogrammingMajong DevJfu
 
Py a6 python-database
Py a6 python-databasePy a6 python-database
Py a6 python-databaseMajong DevJfu
 
Py a1 python-unit_testing
Py a1 python-unit_testingPy a1 python-unit_testing
Py a1 python-unit_testingMajong DevJfu
 
9 - Architetture Software - SOA Cloud
9 - Architetture Software - SOA Cloud9 - Architetture Software - SOA Cloud
9 - Architetture Software - SOA CloudMajong DevJfu
 

En vedette (15)

UE week 2
UE week 2UE week 2
UE week 2
 
T5 memoria
T5 memoriaT5 memoria
T5 memoria
 
Pe a1 perl-unit_testing
Pe a1 perl-unit_testingPe a1 perl-unit_testing
Pe a1 perl-unit_testing
 
Pe t3 perl-moduli
Pe t3 perl-moduliPe t3 perl-moduli
Pe t3 perl-moduli
 
Corso Python Django
Corso Python DjangoCorso Python Django
Corso Python Django
 
Py a2 python-documentazione
Py a2 python-documentazionePy a2 python-documentazione
Py a2 python-documentazione
 
Py a3 python-metaprogramming
Py a3 python-metaprogrammingPy a3 python-metaprogramming
Py a3 python-metaprogramming
 
Py t1 python-intro
Py t1 python-introPy t1 python-intro
Py t1 python-intro
 
Pe a2 perl-documentazione
Pe a2 perl-documentazionePe a2 perl-documentazione
Pe a2 perl-documentazione
 
Pe a3 perl-metaprogramming
Pe a3 perl-metaprogrammingPe a3 perl-metaprogramming
Pe a3 perl-metaprogramming
 
Pe t4 perl-oggetti
Pe t4 perl-oggettiPe t4 perl-oggetti
Pe t4 perl-oggetti
 
Py a6 python-database
Py a6 python-databasePy a6 python-database
Py a6 python-database
 
Py a1 python-unit_testing
Py a1 python-unit_testingPy a1 python-unit_testing
Py a1 python-unit_testing
 
Py a4 python-file
Py a4 python-filePy a4 python-file
Py a4 python-file
 
9 - Architetture Software - SOA Cloud
9 - Architetture Software - SOA Cloud9 - Architetture Software - SOA Cloud
9 - Architetture Software - SOA Cloud
 

Similaire à T2 architettura

Webinar porting e ottimizzazione per x86
Webinar   porting e ottimizzazione per x86Webinar   porting e ottimizzazione per x86
Webinar porting e ottimizzazione per x86Massimiliano Torregiani
 
I linguaggi di programmazione 3BS
I linguaggi di programmazione 3BSI linguaggi di programmazione 3BS
I linguaggi di programmazione 3BSantani tapioco
 
WhyMCA12 - Android Tools e la gestione di progetti complessi
WhyMCA12 - Android Tools e la gestione di progetti complessiWhyMCA12 - Android Tools e la gestione di progetti complessi
WhyMCA12 - Android Tools e la gestione di progetti complessiMarco Gasparetto
 
Thanatos - Parallel & Distributed Computing
Thanatos -  Parallel & Distributed ComputingThanatos -  Parallel & Distributed Computing
Thanatos - Parallel & Distributed ComputingIdriss Riouak
 
Continuous Integration e High Quality Code
Continuous Integration e High Quality CodeContinuous Integration e High Quality Code
Continuous Integration e High Quality CodeDaniele Mondello
 
Concorso Informatici C3 INPS 2007 - Banca Dati
Concorso Informatici C3 INPS 2007 - Banca DatiConcorso Informatici C3 INPS 2007 - Banca Dati
Concorso Informatici C3 INPS 2007 - Banca DatiConcorsando.it
 
Xamarin: Shared Library and Portable Class Library - Aristide Di Francesco - ...
Xamarin: Shared Library and Portable Class Library - Aristide Di Francesco - ...Xamarin: Shared Library and Portable Class Library - Aristide Di Francesco - ...
Xamarin: Shared Library and Portable Class Library - Aristide Di Francesco - ...Codemotion
 
.Net 4.0 Preview @ UGIdotNet
.Net 4.0 Preview @ UGIdotNet.Net 4.0 Preview @ UGIdotNet
.Net 4.0 Preview @ UGIdotNetMauro Servienti
 

Similaire à T2 architettura (20)

05 1 intro-struttura
05 1 intro-struttura05 1 intro-struttura
05 1 intro-struttura
 
Lezione1 Linguaggio C
Lezione1 Linguaggio CLezione1 Linguaggio C
Lezione1 Linguaggio C
 
GNU Linux Programming introduction
GNU Linux Programming introductionGNU Linux Programming introduction
GNU Linux Programming introduction
 
Modulo 1 - Lezione 1
Modulo 1 - Lezione 1Modulo 1 - Lezione 1
Modulo 1 - Lezione 1
 
Dot net framework 2
Dot net framework 2Dot net framework 2
Dot net framework 2
 
La scomposizione in sotto programmi in C++.pptx
La scomposizione in sotto programmi in C++.pptxLa scomposizione in sotto programmi in C++.pptx
La scomposizione in sotto programmi in C++.pptx
 
Webinar porting e ottimizzazione per x86
Webinar   porting e ottimizzazione per x86Webinar   porting e ottimizzazione per x86
Webinar porting e ottimizzazione per x86
 
I linguaggi di programmazione 3BS
I linguaggi di programmazione 3BSI linguaggi di programmazione 3BS
I linguaggi di programmazione 3BS
 
3_il_software
3_il_software3_il_software
3_il_software
 
WhyMCA12 - Android Tools e la gestione di progetti complessi
WhyMCA12 - Android Tools e la gestione di progetti complessiWhyMCA12 - Android Tools e la gestione di progetti complessi
WhyMCA12 - Android Tools e la gestione di progetti complessi
 
Socket python
Socket pythonSocket python
Socket python
 
Arduino primo v1
Arduino primo v1Arduino primo v1
Arduino primo v1
 
Thanatos - Parallel & Distributed Computing
Thanatos -  Parallel & Distributed ComputingThanatos -  Parallel & Distributed Computing
Thanatos - Parallel & Distributed Computing
 
Thanatos
ThanatosThanatos
Thanatos
 
Continuous Integration e High Quality Code
Continuous Integration e High Quality CodeContinuous Integration e High Quality Code
Continuous Integration e High Quality Code
 
Concorso Informatici C3 INPS 2007 - Banca Dati
Concorso Informatici C3 INPS 2007 - Banca DatiConcorso Informatici C3 INPS 2007 - Banca Dati
Concorso Informatici C3 INPS 2007 - Banca Dati
 
C++.pptx
C++.pptxC++.pptx
C++.pptx
 
Xamarin: Shared Library and Portable Class Library - Aristide Di Francesco - ...
Xamarin: Shared Library and Portable Class Library - Aristide Di Francesco - ...Xamarin: Shared Library and Portable Class Library - Aristide Di Francesco - ...
Xamarin: Shared Library and Portable Class Library - Aristide Di Francesco - ...
 
Inferno Limbo Italian
Inferno Limbo ItalianInferno Limbo Italian
Inferno Limbo Italian
 
.Net 4.0 Preview @ UGIdotNet
.Net 4.0 Preview @ UGIdotNet.Net 4.0 Preview @ UGIdotNet
.Net 4.0 Preview @ UGIdotNet
 

Plus de Majong DevJfu

8 - Architetture Software - Architecture centric processes
8 - Architetture Software - Architecture centric processes8 - Architetture Software - Architecture centric processes
8 - Architetture Software - Architecture centric processesMajong DevJfu
 
7 - Architetture Software - Software product line
7 - Architetture Software - Software product line7 - Architetture Software - Software product line
7 - Architetture Software - Software product lineMajong DevJfu
 
6 - Architetture Software - Model transformation
6 - Architetture Software - Model transformation6 - Architetture Software - Model transformation
6 - Architetture Software - Model transformationMajong DevJfu
 
5 - Architetture Software - Metamodelling and the Model Driven Architecture
5 - Architetture Software - Metamodelling and the Model Driven Architecture5 - Architetture Software - Metamodelling and the Model Driven Architecture
5 - Architetture Software - Metamodelling and the Model Driven ArchitectureMajong DevJfu
 
4 - Architetture Software - Architecture Portfolio
4 - Architetture Software - Architecture Portfolio4 - Architetture Software - Architecture Portfolio
4 - Architetture Software - Architecture PortfolioMajong DevJfu
 
3 - Architetture Software - Architectural styles
3 - Architetture Software - Architectural styles3 - Architetture Software - Architectural styles
3 - Architetture Software - Architectural stylesMajong DevJfu
 
2 - Architetture Software - Software architecture
2 - Architetture Software - Software architecture2 - Architetture Software - Software architecture
2 - Architetture Software - Software architectureMajong DevJfu
 
1 - Architetture Software - Software as a product
1 - Architetture Software - Software as a product1 - Architetture Software - Software as a product
1 - Architetture Software - Software as a productMajong DevJfu
 
10 - Architetture Software - More architectural styles
10 - Architetture Software - More architectural styles10 - Architetture Software - More architectural styles
10 - Architetture Software - More architectural stylesMajong DevJfu
 
25 architectural adaptation
25 architectural adaptation25 architectural adaptation
25 architectural adaptationMajong DevJfu
 

Plus de Majong DevJfu (20)

8 - Architetture Software - Architecture centric processes
8 - Architetture Software - Architecture centric processes8 - Architetture Software - Architecture centric processes
8 - Architetture Software - Architecture centric processes
 
7 - Architetture Software - Software product line
7 - Architetture Software - Software product line7 - Architetture Software - Software product line
7 - Architetture Software - Software product line
 
6 - Architetture Software - Model transformation
6 - Architetture Software - Model transformation6 - Architetture Software - Model transformation
6 - Architetture Software - Model transformation
 
5 - Architetture Software - Metamodelling and the Model Driven Architecture
5 - Architetture Software - Metamodelling and the Model Driven Architecture5 - Architetture Software - Metamodelling and the Model Driven Architecture
5 - Architetture Software - Metamodelling and the Model Driven Architecture
 
4 - Architetture Software - Architecture Portfolio
4 - Architetture Software - Architecture Portfolio4 - Architetture Software - Architecture Portfolio
4 - Architetture Software - Architecture Portfolio
 
3 - Architetture Software - Architectural styles
3 - Architetture Software - Architectural styles3 - Architetture Software - Architectural styles
3 - Architetture Software - Architectural styles
 
2 - Architetture Software - Software architecture
2 - Architetture Software - Software architecture2 - Architetture Software - Software architecture
2 - Architetture Software - Software architecture
 
1 - Architetture Software - Software as a product
1 - Architetture Software - Software as a product1 - Architetture Software - Software as a product
1 - Architetture Software - Software as a product
 
10 - Architetture Software - More architectural styles
10 - Architetture Software - More architectural styles10 - Architetture Software - More architectural styles
10 - Architetture Software - More architectural styles
 
Uml3
Uml3Uml3
Uml3
 
Uml2
Uml2Uml2
Uml2
 
6
66
6
 
5
55
5
 
4 (uml basic)
4 (uml basic)4 (uml basic)
4 (uml basic)
 
3
33
3
 
2
22
2
 
1
11
1
 
Tmd template-sand
Tmd template-sandTmd template-sand
Tmd template-sand
 
26 standards
26 standards26 standards
26 standards
 
25 architectural adaptation
25 architectural adaptation25 architectural adaptation
25 architectural adaptation
 

T2 architettura

  • 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