SlideShare a Scribd company logo
Parte 1



               Un esempio di
           ambiente di esecuzione:
                   il Perl



Linguaggi dinamici – A.A. 2009/2010
                                      1
Ciclo di vita di un programma Perl
„   Il ciclo di vita di un programma scritto in Perl si
    compone di quattro fasi successive
    (due opzionali, due obbligatorie)
    1)Compilazione (obbligatoria)
    2)Generazione di codice (opzionale)
    3)Ricostruzione del parse t
    3)Ri   t   i    d l       tree (
                                   (opzionale)
                                       i   l )
    4)Esecuzione (obbligatoria)
„   Fasi gestite dall'eseguibile /usr/bin/perl
 „ Le fasi opzionali sono dovute al fatto che un

    programma in Perl può anche essere
 compilato per generare un eseguibile (se si
    vuole)
Linguaggi dinamici – A.A. 2009/2010
                                                          2
Ciclo di vita di un programma Perl




Linguaggi dinamici – A.A. 2009/2010
                                          3
Compilazione
„   L'obiettivo della compilazione è quello di
    produrre una rappresentazione del codice
    sorgente in grado di essere eseguita da un
    interprete
      te p ete
„   L'interprete è in grado di eseguire comandi
    primitivi (detti opcode) in una ben specifica
    sequenza
„   La rappresentazione finale deve raggiungere
    due obiettivi:
     „ elencare gli opcode
        l         li     d
     „ elencare l'ordine di sequenza



Linguaggi dinamici – A.A. 2009/2010
                                                    4
Compilazione
„   La rappresentazione scelta è l‘Abstract Syntax
    Tree (AST) un albero in cui:
         (AST),
      „   ogni nodo non foglia è un opcode interno del
          Perl (eseguibile direttamente dall'interprete)
                                        dall interprete)
      „   ogni nodo foglia è un operando
      „   l'ordine
          l' di di visita (la precedenza degli operatori)
                       i it (l      d      d li        t i)
          è da sinistra verso destra e dal basso verso
          l altro
          l'altro
„   Visita in post-ordine: prima il sottoalbero
    sinistro, poi quello destro, poi il nodo radice
     i i t      i    ll d t         i     d    di


Linguaggi dinamici – A.A. 2009/2010
                                                              5
Compilazione




      AST associato allo statement
      $
      $a = -($b + $ )
            ($    $c)
Linguaggi dinamici – A.A. 2009/2010
                                              6
Compilazione
„   Durante la fase di compilazione
    „ può essere eseguito codice del programma!

           „   Blocchi di codice contrassegnati con la
               parola chiave BEGIN sono i t
                    l hi      BEGIN:       interpretati subito
                                                   t ti bit
               dopo la loro scansione
           „   Direttiva
               Di tti use per il caricamento dei moduli: è
                                     i       t d i     d li
               interpretata subito dopo la sua scansione
      „   possono essere valutate espressioni!
           „ Definizioni di costanti




Linguaggi dinamici – A.A. 2009/2010
                                                                 7
Compilazione
„   Viene effettuata una analisi sintattica completa
    del programma, per determinare la presenza di
        programma
    eventuali errori di sintassi
„   Se viene trovato un errore di sintassi, il
                                  sintassi
    compilatore non si ferma subito (!), bensì
    continua l'analisi per scovare altri errori
             l analisi
      „   Tipicamente, un errore sintattico ne provoca
          altri in cascata
      „   Dopo dieci errori, il compilatore si ferma




Linguaggi dinamici – A.A. 2009/2010
                                                         8
Compilazione
„   L'analisi sintattica avviene tramite l'uso di tre
    moduli distinti
„   Lexer: identifica i token all'interno del codice
    sorgente
„   Parser: prova ad associare un gruppo
    contiguo di token ad un costrutto
        ti       t k      d        t tt
    (espressione, statement) in base alla
    grammatica del Perl
             ti d l P l
„   Optimizer: riordina e riduce i costrutti prodotti
    dal parser, con l'obiettivo di produrre
    sequenze di codice equivalenti e più efficienti
Linguaggi dinamici – A.A. 2009/2010
                                                        9
Compilazione
„   Le fasi dell'analisi sintattica non sono
    consecutive,
    consecutive bensì interallacciate
„   Alcuni esempi
      „   Il lexer ha bisogno di alcuni suggerimenti da
             l     h bi           l   i       i   ti d
          parte del parser per capire come estrarre un
          token
      „   L'optimizer spesso non può entrare in azione
          fino a quando il parser non ha raggiunto un
          certo punto (elaborazione di una espressione, di
          uno statement, di un blocco di una subroutine)
                statement       blocco,
„   Similitudine con il linguaggio naturale

Linguaggi dinamici – A.A. 2009/2010
                                                             10
Compilazione
„   Le fasi di analisi sintattica si alternano nel
    modo seguente, con una modalità di
          seguente
    compilazione multi-passo
„   Passo 1: Bottom-Up Parsing
      „   Il parser riceve in ingresso i token prodotti dal
          lexer ed usa yacc per costruire l AST
                                             l'AST
      „   Il parsing è di tipo “bottom-up” perché parte
          dalle foglie ed arriva fino alla radice dell'AST
      „   In seguito alla costruzione di un nodo, si
          verifica se la semantica dell'opcode relativo è
               ifi     l        ti d ll'       d    l ti
          congruente (ad es., se viene usato il numero ed
          il tipo corretto di parametri per una funzione)
Linguaggi dinamici – A.A. 2009/2010
                                                              11
Compilazione
„   Le fasi di analisi sintattica si alternano nel
    modo seguente, con una modalità di
          seguente
    compilazione multi-passo
„   Passo 1: Bottom-Up Parsing
      „   Man mano che vengono costruiti sottoalberi
          dell AST,
          dell'AST si invoca l'optimizer per produrre
                              l optimizer
          porzioni di statement più efficienti
           „ Se il parser capisce che lo statement attuale

             è una chiamata ad una funzione con un
             numero di parametri fisso allora si può non
                                   fisso,
             considerare l'opcode che gestisce le funzioni
             con numero di parametri variabile
Linguaggi dinamici – A.A. 2009/2010
                                                             12
Compilazione
„   Le fasi di analisi sintattica si alternano nel
    modo seguente, con una modalità di
          seguente
    compilazione multi-passo
„   Passo 1: Bottom-Up Parsing
      „   Non appena un sottoalbero dell'AST è generato,
          viene creata una struttura ciclica che collega i
          nodi dell'AST secondo l'ordinamento visto in
          precedenza
      „   Il nodo radice viene collegato con il primo nodo
          da visitare; il primo nodo da visitare viene
          collegato con il secondo nodo da visitare

Linguaggi dinamici – A.A. 2009/2010
                                                             13
Compilazione
„   Le fasi di analisi sintattica si alternano nel
    modo seguente, con una modalità di
          seguente
    compilazione multi-passo
„   Passo 1: Bottom-Up Parsing
      „   Quando il sottoalbero dell'AST viene attaccato
          ad un altro AST il ciclo radice primo nodo si
                       AST,          radice-primo
          spezza, e viene ricostruito con il nuovo albero
      „   L'interprete può individuare in maniera
          efficiente (O(1)) il nodo iniziale della visita




Linguaggi dinamici – A.A. 2009/2010
                                                            14
Compilazione




      AST associato allo statement
      $
      $a = -($b + $ )
            ($    $c)
Linguaggi dinamici – A.A. 2009/2010
                                              15
Compilazione
„   Le fasi di analisi sintattica si alternano nel
    modo seguente, con una modalità di
          seguente
    compilazione multi-passo
„   Passo 2: Top-down Optimizer
      „   Non appena un sottoalbero dell'AST viene
          prodotto,
          prodotto viene scandito dalla radice alle foglie
          per eventuali ottimizzazioni




Linguaggi dinamici – A.A. 2009/2010
                                                             16
Compilazione
„   Le fasi di analisi sintattica si alternano nel
    modo seguente, con una modalità di
          seguente
    compilazione multi-passo
„   Passo 3: Peephole Optimizer
      „   Alcune porzioni di codice hanno un loro spazio
          di memorizzazione locale per le variabili
           „ Singole Subroutine (variabili locali)


           „ Si
             Singoli file (variabili globali)
                   li fil (   i bili l b li)
           „ Stringhe contenenti codice (eval())




Linguaggi dinamici – A.A. 2009/2010
                                                           17
Compilazione
„   Le fasi di analisi sintattica si alternano nel
    modo seguente, con una modalità di
          seguente
    compilazione multi-passo
„   Passo 3: Peephole Optimizer
      „   Il peephole optimizer ottimizza tali porzioni di
          codice in maniera sequenziale
            „ Controlla se esiste codice non raggiungibile

              (lo cancella, in tal caso)
                   cancella
            „ Controlla se una funzione è invocata prima

              che il suo prototipo sia stato compilato
            „ Cerca di risolvere le espressioni costanti il

              più presto possibile (Constant f ldi )
                iù     t        ibil (C   t t folding)
Linguaggi dinamici – A.A. 2009/2010
                                                              18
Compilazione
 „   Constant folding: l'ottimizzatore trova
     operazioni con operandi tutti costanti, calcola
                                    costanti
     l'espressione finale e sostituisce
     all espressione
     all'espressione di partenza il suo risultato
      „   Per operando si intende anche il valore di
          ritorno di una funzione!
 „   Ad esempo, se nell'AST di esempio si
     sostituiscono a $b e $c due espressioni
     costanti qualunque, tali che il risultato della
     valutazione del sottoalbero AST con radice
     pari al nodo 4 sia -42, si ottiene il seguente
     AST ottimizzato equivalente
Linguaggi dinamici – A.A. 2009/2010
                                                       19
Compilazione




Linguaggi dinamici – A.A. 2009/2010
                                              20
Compilazione
 ƒ Strength reduction: rimpiazza operazioni
   “lente” con operazioni equivalenti e più veloci
    lente
 ƒ Esempio:
      ƒ mul ax,2 Æ shift_left ax
 ƒ Null sequences: elimina operazioni inutili
 ƒ Esempio:
      ƒ mov r0 i; mov i r0 Æ mov r0 i
            r0,       i,         r0,




Linguaggi dinamici – A.A. 2009/2010
                                                     21
Compilazione
 ƒ Combine Operations: rimpiazza un insieme di
   operazioni con una operazione singola
   equivalente
 ƒ Al b i L
   Algebraic Laws: usa l leggi algebriche per
                             i l bi h
   semplificare o riordinare le istruzioni
 ƒ Special Case Instructions: usa istruzioni
   “speciali” progettate per specifici operandi




Linguaggi dinamici – A.A. 2009/2010
                                                  22
Compilazione
„   A questo punto, la compilazione è terminata
„   Si può inspezionare l'AST prodotto con il
    comando perl -MO=Concise,-src file.pl
„   Se si era invocato il servizio di controllo
    sintattico del programma (perl -c source.pl), il
    compilatore ci informa del risultato dell'analisi
    sintattica
„   Altrimenti, si passa allo stadio successivo, che
    nella nostra trattazione limitata è l'interprete
      „   Ma può anche essere un altro compilatore
          (p
          (perlcc -o hello hello.pl)
                                 p)
Linguaggi dinamici – A.A. 2009/2010
                                                        23
Interprete
„   L'interprete Perl esegue gli opcode dell'AST
    nella sequenza specificata
„   L'interprete usa una macchina basata su stack
    per eseguire il codice
„   Gli opcode manipolano gli operandi che
    vengono i inseriti nello stack, secondo una
                   iti ll t k            d
    modalità molto simile alla notazione polacca
    inversa
      „   Push a, Push b
      „   Opcode (pop a, pop b, calcolo, push risultato)


Linguaggi dinamici – A.A. 2009/2010
                                                           24
Interprete
„   L'interprete Perl crea diversi stack, fra gli altri:
      „   Operand stack: memorizzazione degli operandi
          degli operatori
      „   Save stack: memorizzazione delle variabili il cui
          S      t k           i    i     d ll      i bili    i
          scope è stato alterato da altre
           „ E
             Es.: variabile globale i il cui valore è stato
                     i bil l b l i,        i l          t t
             offuscato dalla variabile locale i all'interno di
             una funzione
      „   Return stack: memorizzazione degli indirizzi di
          ritorno delle funzioni


Linguaggi dinamici – A.A. 2009/2010
                                                                  25

More Related Content

What's hot

Le Espressioni Regolari e gli Automi
Le Espressioni Regolari e gli AutomiLe Espressioni Regolari e gli Automi
Le Espressioni Regolari e gli Automi
Giuseppe Luciano
 
Attacchi alle applicazioni basati su buffer overflow
Attacchi alle applicazioni basati su buffer overflowAttacchi alle applicazioni basati su buffer overflow
Attacchi alle applicazioni basati su buffer overflow
Giacomo Antonino Fazio
 
Attacchi alle applicazioni basati su buffer overflow
Attacchi alle applicazioni basati su buffer overflowAttacchi alle applicazioni basati su buffer overflow
Attacchi alle applicazioni basati su buffer overflowGiacomo Antonino Fazio
 
Py t3 python-oggetti
Py t3 python-oggettiPy t3 python-oggetti
Py t3 python-oggettiMajong DevJfu
 
Pe a3 perl-metaprogramming
Pe a3 perl-metaprogrammingPe a3 perl-metaprogramming
Pe a3 perl-metaprogrammingMajong DevJfu
 
2011.02.19 Introducing F#
2011.02.19 Introducing F#2011.02.19 Introducing F#
2011.02.19 Introducing F#
Marco Parenzan
 
Caratteristiche del linguaggio c
Caratteristiche del linguaggio cCaratteristiche del linguaggio c
Caratteristiche del linguaggio cughetta
 
Pe t2 perl-caratteristiche
Pe t2 perl-caratteristichePe t2 perl-caratteristiche
Pe t2 perl-caratteristicheMajong DevJfu
 
Scala: come recuperare la programmazione funzionale e perché
Scala: come recuperare la programmazione funzionale e perchéScala: come recuperare la programmazione funzionale e perché
Scala: come recuperare la programmazione funzionale e perché
Edmondo Porcu
 
06 - Programmazione: Scope Variabili
06 - Programmazione: Scope Variabili06 - Programmazione: Scope Variabili
06 - Programmazione: Scope VariabiliMajong DevJfu
 
Linguaggi Formali e Compilazione: Frontend
Linguaggi Formali e Compilazione: FrontendLinguaggi Formali e Compilazione: Frontend
Linguaggi Formali e Compilazione: FrontendMajong DevJfu
 
Inferno Limbo Italian
Inferno Limbo ItalianInferno Limbo Italian
Inferno Limbo Italian
Alberto Minetti
 
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
 
Appunti interrupt 8086
Appunti interrupt 8086Appunti interrupt 8086
Appunti interrupt 8086
Samanta Tordini
 
Le basi di Pytthon 3 - Fondamenti n.1
Le basi di Pytthon 3 - Fondamenti n.1Le basi di Pytthon 3 - Fondamenti n.1
Le basi di Pytthon 3 - Fondamenti n.1
I.S.I.S. "Antonio Serra" - Napoli
 

What's hot (20)

Le Espressioni Regolari e gli Automi
Le Espressioni Regolari e gli AutomiLe Espressioni Regolari e gli Automi
Le Espressioni Regolari e gli Automi
 
Py a4 python-file
Py a4 python-filePy a4 python-file
Py a4 python-file
 
Attacchi alle applicazioni basati su buffer overflow
Attacchi alle applicazioni basati su buffer overflowAttacchi alle applicazioni basati su buffer overflow
Attacchi alle applicazioni basati su buffer overflow
 
Attacchi alle applicazioni basati su buffer overflow
Attacchi alle applicazioni basati su buffer overflowAttacchi alle applicazioni basati su buffer overflow
Attacchi alle applicazioni basati su buffer overflow
 
Py t3 python-oggetti
Py t3 python-oggettiPy t3 python-oggetti
Py t3 python-oggetti
 
Pe a3 perl-metaprogramming
Pe a3 perl-metaprogrammingPe a3 perl-metaprogramming
Pe a3 perl-metaprogramming
 
2011.02.19 Introducing F#
2011.02.19 Introducing F#2011.02.19 Introducing F#
2011.02.19 Introducing F#
 
T7 librerie
T7 librerieT7 librerie
T7 librerie
 
Pe t3 perl-moduli
Pe t3 perl-moduliPe t3 perl-moduli
Pe t3 perl-moduli
 
Caratteristiche del linguaggio c
Caratteristiche del linguaggio cCaratteristiche del linguaggio c
Caratteristiche del linguaggio c
 
Pe t2 perl-caratteristiche
Pe t2 perl-caratteristichePe t2 perl-caratteristiche
Pe t2 perl-caratteristiche
 
Scala: come recuperare la programmazione funzionale e perché
Scala: come recuperare la programmazione funzionale e perchéScala: come recuperare la programmazione funzionale e perché
Scala: come recuperare la programmazione funzionale e perché
 
06 - Programmazione: Scope Variabili
06 - Programmazione: Scope Variabili06 - Programmazione: Scope Variabili
06 - Programmazione: Scope Variabili
 
Linguaggi Formali e Compilazione: Frontend
Linguaggi Formali e Compilazione: FrontendLinguaggi Formali e Compilazione: Frontend
Linguaggi Formali e Compilazione: Frontend
 
Inferno Limbo Italian
Inferno Limbo ItalianInferno Limbo Italian
Inferno Limbo Italian
 
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
 
Appunti interrupt 8086
Appunti interrupt 8086Appunti interrupt 8086
Appunti interrupt 8086
 
Le basi di Pytthon 3 - Fondamenti n.1
Le basi di Pytthon 3 - Fondamenti n.1Le basi di Pytthon 3 - Fondamenti n.1
Le basi di Pytthon 3 - Fondamenti n.1
 
T4 tipizzazione
T4 tipizzazioneT4 tipizzazione
T4 tipizzazione
 
2006 Py01 intro
2006 Py01 intro2006 Py01 intro
2006 Py01 intro
 

Viewers also liked

UE week 2
UE week 2UE week 2
UE week 2
guestf3084246
 
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
 
Pe a2 perl-documentazione
Pe a2 perl-documentazionePe a2 perl-documentazione
Pe a2 perl-documentazioneMajong 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 Cloud
Majong DevJfu
 

Viewers also liked (12)

UE week 2
UE week 2UE week 2
UE week 2
 
T2 architettura
T2 architetturaT2 architettura
T2 architettura
 
T8 supporti
T8 supportiT8 supporti
T8 supporti
 
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
 
T1 introduzione
T1 introduzioneT1 introduzione
T1 introduzione
 
T6 codice
T6 codiceT6 codice
T6 codice
 
Corso Python Django
Corso Python DjangoCorso Python Django
Corso Python Django
 
Pe a2 perl-documentazione
Pe a2 perl-documentazionePe a2 perl-documentazione
Pe a2 perl-documentazione
 
Pe t4 perl-oggetti
Pe t4 perl-oggettiPe t4 perl-oggetti
Pe t4 perl-oggetti
 
Py a1 python-unit_testing
Py a1 python-unit_testingPy a1 python-unit_testing
Py a1 python-unit_testing
 
9 - Architetture Software - SOA Cloud
9 - Architetture Software - SOA Cloud9 - Architetture Software - SOA Cloud
9 - Architetture Software - SOA Cloud
 

Similar to T3 esempio runtime

14 - Programmazione: Stream e File
14 - Programmazione: Stream e File14 - Programmazione: Stream e File
14 - Programmazione: Stream e FileMajong DevJfu
 
[BASH] Shell Scripting [ITA]
[BASH] Shell Scripting [ITA][BASH] Shell Scripting [ITA]
[BASH] Shell Scripting [ITA]
Matteo Collica
 
Bash programming
Bash programmingBash programming
Bash programming
Sebastiano Merlino (eTr)
 
Dsl in Lisp e Java
Dsl in Lisp e JavaDsl in Lisp e Java
Dsl in Lisp e Java
alessiostalla
 
Dynamic Language Programming For The Statically Typed Programmer
Dynamic Language Programming For The Statically Typed ProgrammerDynamic Language Programming For The Statically Typed Programmer
Dynamic Language Programming For The Statically Typed Programmer
Marco Parenzan
 
Xamarin Workbooks
Xamarin WorkbooksXamarin Workbooks
Xamarin Workbooks
Nicolò Carandini
 
Xamarin Interactive Workbooks
Xamarin Interactive WorkbooksXamarin Interactive Workbooks
Xamarin Interactive Workbooks
Nicolò Carandini
 
Progetto e realizzazione di uno strumento per la modifica sistematica di codi...
Progetto e realizzazione di uno strumento per la modifica sistematica di codi...Progetto e realizzazione di uno strumento per la modifica sistematica di codi...
Progetto e realizzazione di uno strumento per la modifica sistematica di codi...
Università degli Studi di Trieste
 
EIP with Apache Camel
EIP with Apache CamelEIP with Apache Camel
EIP with Apache Camel
Andrea Torino Rodriguez
 
Lezione 4 (7 marzo 2012)
Lezione 4 (7 marzo 2012)Lezione 4 (7 marzo 2012)
Lezione 4 (7 marzo 2012)STELITANO
 
15 - Programmazione: Algoritmi
15 - Programmazione: Algoritmi15 - Programmazione: Algoritmi
15 - Programmazione: AlgoritmiMajong DevJfu
 
Programmazione funzionale: un primo approccio attraverso F#
Programmazione funzionale: un primo approccio attraverso F#Programmazione funzionale: un primo approccio attraverso F#
Programmazione funzionale: un primo approccio attraverso F#
Commit University
 
Analizzatori di programmi in C
Analizzatori di programmi in CAnalizzatori di programmi in C
Analizzatori di programmi in C
Boymix81
 
Linux@Unina
Linux@UninaLinux@Unina
Linux@Unina
NaLUG
 
Compressione dei file
Compressione dei fileCompressione dei file
Compressione dei file
Antonio Tandoi
 
Corso java base
Corso java baseCorso java base
Corso java base
Simone Gimelli
 

Similar to T3 esempio runtime (20)

14 - Programmazione: Stream e File
14 - Programmazione: Stream e File14 - Programmazione: Stream e File
14 - Programmazione: Stream e File
 
[BASH] Shell Scripting [ITA]
[BASH] Shell Scripting [ITA][BASH] Shell Scripting [ITA]
[BASH] Shell Scripting [ITA]
 
Bash programming
Bash programmingBash programming
Bash programming
 
Dsl in Lisp e Java
Dsl in Lisp e JavaDsl in Lisp e Java
Dsl in Lisp e Java
 
Dynamic Language Programming For The Statically Typed Programmer
Dynamic Language Programming For The Statically Typed ProgrammerDynamic Language Programming For The Statically Typed Programmer
Dynamic Language Programming For The Statically Typed Programmer
 
Linguaggi di programmazione
Linguaggi di programmazioneLinguaggi di programmazione
Linguaggi di programmazione
 
Xamarin Workbooks
Xamarin WorkbooksXamarin Workbooks
Xamarin Workbooks
 
Xamarin Interactive Workbooks
Xamarin Interactive WorkbooksXamarin Interactive Workbooks
Xamarin Interactive Workbooks
 
Progetto e realizzazione di uno strumento per la modifica sistematica di codi...
Progetto e realizzazione di uno strumento per la modifica sistematica di codi...Progetto e realizzazione di uno strumento per la modifica sistematica di codi...
Progetto e realizzazione di uno strumento per la modifica sistematica di codi...
 
EIP with Apache Camel
EIP with Apache CamelEIP with Apache Camel
EIP with Apache Camel
 
Lezione 4 (7 marzo 2012)
Lezione 4 (7 marzo 2012)Lezione 4 (7 marzo 2012)
Lezione 4 (7 marzo 2012)
 
15 - Programmazione: Algoritmi
15 - Programmazione: Algoritmi15 - Programmazione: Algoritmi
15 - Programmazione: Algoritmi
 
05 1 intro-struttura
05 1 intro-struttura05 1 intro-struttura
05 1 intro-struttura
 
Programmazione funzionale: un primo approccio attraverso F#
Programmazione funzionale: un primo approccio attraverso F#Programmazione funzionale: un primo approccio attraverso F#
Programmazione funzionale: un primo approccio attraverso F#
 
Analizzatori di programmi in C
Analizzatori di programmi in CAnalizzatori di programmi in C
Analizzatori di programmi in C
 
Linux@Unina
Linux@UninaLinux@Unina
Linux@Unina
 
Compressione dei file
Compressione dei fileCompressione dei file
Compressione dei file
 
Corso java base
Corso java baseCorso java base
Corso java base
 
Modulo 1 - Lezione 1
Modulo 1 - Lezione 1Modulo 1 - Lezione 1
Modulo 1 - Lezione 1
 
Pycon
PyconPycon
Pycon
 

More from Majong DevJfu

8 - Architetture Software - Architecture centric processes
8 - Architetture Software - Architecture centric processes8 - Architetture Software - Architecture centric processes
8 - Architetture Software - Architecture centric processes
Majong DevJfu
 
7 - Architetture Software - Software product line
7 - Architetture Software - Software product line7 - Architetture Software - Software product line
7 - Architetture Software - Software product line
Majong DevJfu
 
6 - Architetture Software - Model transformation
6 - Architetture Software - Model transformation6 - Architetture Software - Model transformation
6 - Architetture Software - Model transformation
Majong 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 Architecture
Majong DevJfu
 
4 - Architetture Software - Architecture Portfolio
4 - Architetture Software - Architecture Portfolio4 - Architetture Software - Architecture Portfolio
4 - Architetture Software - Architecture Portfolio
Majong DevJfu
 
3 - Architetture Software - Architectural styles
3 - Architetture Software - Architectural styles3 - Architetture Software - Architectural styles
3 - Architetture Software - Architectural styles
Majong DevJfu
 
2 - Architetture Software - Software architecture
2 - Architetture Software - Software architecture2 - Architetture Software - Software architecture
2 - Architetture Software - Software architecture
Majong 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 product
Majong DevJfu
 
10 - Architetture Software - More architectural styles
10 - Architetture Software - More architectural styles10 - Architetture Software - More architectural styles
10 - Architetture Software - More architectural styles
Majong DevJfu
 
Uml3
Uml3Uml3
Uml2
Uml2Uml2
6
66
5
55
4 (uml basic)
4 (uml basic)4 (uml basic)
4 (uml basic)
Majong DevJfu
 
3
33
2
22
1
11
Tmd template-sand
Tmd template-sandTmd template-sand
Tmd template-sand
Majong DevJfu
 
26 standards
26 standards26 standards
26 standards
Majong DevJfu
 
25 architectural adaptation
25 architectural adaptation25 architectural adaptation
25 architectural adaptation
Majong DevJfu
 

More from 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
 

T3 esempio runtime

  • 1. Parte 1 Un esempio di ambiente di esecuzione: il Perl Linguaggi dinamici – A.A. 2009/2010 1
  • 2. Ciclo di vita di un programma Perl „ Il ciclo di vita di un programma scritto in Perl si compone di quattro fasi successive (due opzionali, due obbligatorie) 1)Compilazione (obbligatoria) 2)Generazione di codice (opzionale) 3)Ricostruzione del parse t 3)Ri t i d l tree ( (opzionale) i l ) 4)Esecuzione (obbligatoria) „ Fasi gestite dall'eseguibile /usr/bin/perl „ Le fasi opzionali sono dovute al fatto che un programma in Perl può anche essere compilato per generare un eseguibile (se si vuole) Linguaggi dinamici – A.A. 2009/2010 2
  • 3. Ciclo di vita di un programma Perl Linguaggi dinamici – A.A. 2009/2010 3
  • 4. Compilazione „ L'obiettivo della compilazione è quello di produrre una rappresentazione del codice sorgente in grado di essere eseguita da un interprete te p ete „ L'interprete è in grado di eseguire comandi primitivi (detti opcode) in una ben specifica sequenza „ La rappresentazione finale deve raggiungere due obiettivi: „ elencare gli opcode l li d „ elencare l'ordine di sequenza Linguaggi dinamici – A.A. 2009/2010 4
  • 5. Compilazione „ La rappresentazione scelta è l‘Abstract Syntax Tree (AST) un albero in cui: (AST), „ ogni nodo non foglia è un opcode interno del Perl (eseguibile direttamente dall'interprete) dall interprete) „ ogni nodo foglia è un operando „ l'ordine l' di di visita (la precedenza degli operatori) i it (l d d li t i) è da sinistra verso destra e dal basso verso l altro l'altro „ Visita in post-ordine: prima il sottoalbero sinistro, poi quello destro, poi il nodo radice i i t i ll d t i d di Linguaggi dinamici – A.A. 2009/2010 5
  • 6. Compilazione AST associato allo statement $ $a = -($b + $ ) ($ $c) Linguaggi dinamici – A.A. 2009/2010 6
  • 7. Compilazione „ Durante la fase di compilazione „ può essere eseguito codice del programma! „ Blocchi di codice contrassegnati con la parola chiave BEGIN sono i t l hi BEGIN: interpretati subito t ti bit dopo la loro scansione „ Direttiva Di tti use per il caricamento dei moduli: è i t d i d li interpretata subito dopo la sua scansione „ possono essere valutate espressioni! „ Definizioni di costanti Linguaggi dinamici – A.A. 2009/2010 7
  • 8. Compilazione „ Viene effettuata una analisi sintattica completa del programma, per determinare la presenza di programma eventuali errori di sintassi „ Se viene trovato un errore di sintassi, il sintassi compilatore non si ferma subito (!), bensì continua l'analisi per scovare altri errori l analisi „ Tipicamente, un errore sintattico ne provoca altri in cascata „ Dopo dieci errori, il compilatore si ferma Linguaggi dinamici – A.A. 2009/2010 8
  • 9. Compilazione „ L'analisi sintattica avviene tramite l'uso di tre moduli distinti „ Lexer: identifica i token all'interno del codice sorgente „ Parser: prova ad associare un gruppo contiguo di token ad un costrutto ti t k d t tt (espressione, statement) in base alla grammatica del Perl ti d l P l „ Optimizer: riordina e riduce i costrutti prodotti dal parser, con l'obiettivo di produrre sequenze di codice equivalenti e più efficienti Linguaggi dinamici – A.A. 2009/2010 9
  • 10. Compilazione „ Le fasi dell'analisi sintattica non sono consecutive, consecutive bensì interallacciate „ Alcuni esempi „ Il lexer ha bisogno di alcuni suggerimenti da l h bi l i i ti d parte del parser per capire come estrarre un token „ L'optimizer spesso non può entrare in azione fino a quando il parser non ha raggiunto un certo punto (elaborazione di una espressione, di uno statement, di un blocco di una subroutine) statement blocco, „ Similitudine con il linguaggio naturale Linguaggi dinamici – A.A. 2009/2010 10
  • 11. Compilazione „ Le fasi di analisi sintattica si alternano nel modo seguente, con una modalità di seguente compilazione multi-passo „ Passo 1: Bottom-Up Parsing „ Il parser riceve in ingresso i token prodotti dal lexer ed usa yacc per costruire l AST l'AST „ Il parsing è di tipo “bottom-up” perché parte dalle foglie ed arriva fino alla radice dell'AST „ In seguito alla costruzione di un nodo, si verifica se la semantica dell'opcode relativo è ifi l ti d ll' d l ti congruente (ad es., se viene usato il numero ed il tipo corretto di parametri per una funzione) Linguaggi dinamici – A.A. 2009/2010 11
  • 12. Compilazione „ Le fasi di analisi sintattica si alternano nel modo seguente, con una modalità di seguente compilazione multi-passo „ Passo 1: Bottom-Up Parsing „ Man mano che vengono costruiti sottoalberi dell AST, dell'AST si invoca l'optimizer per produrre l optimizer porzioni di statement più efficienti „ Se il parser capisce che lo statement attuale è una chiamata ad una funzione con un numero di parametri fisso allora si può non fisso, considerare l'opcode che gestisce le funzioni con numero di parametri variabile Linguaggi dinamici – A.A. 2009/2010 12
  • 13. Compilazione „ Le fasi di analisi sintattica si alternano nel modo seguente, con una modalità di seguente compilazione multi-passo „ Passo 1: Bottom-Up Parsing „ Non appena un sottoalbero dell'AST è generato, viene creata una struttura ciclica che collega i nodi dell'AST secondo l'ordinamento visto in precedenza „ Il nodo radice viene collegato con il primo nodo da visitare; il primo nodo da visitare viene collegato con il secondo nodo da visitare Linguaggi dinamici – A.A. 2009/2010 13
  • 14. Compilazione „ Le fasi di analisi sintattica si alternano nel modo seguente, con una modalità di seguente compilazione multi-passo „ Passo 1: Bottom-Up Parsing „ Quando il sottoalbero dell'AST viene attaccato ad un altro AST il ciclo radice primo nodo si AST, radice-primo spezza, e viene ricostruito con il nuovo albero „ L'interprete può individuare in maniera efficiente (O(1)) il nodo iniziale della visita Linguaggi dinamici – A.A. 2009/2010 14
  • 15. Compilazione AST associato allo statement $ $a = -($b + $ ) ($ $c) Linguaggi dinamici – A.A. 2009/2010 15
  • 16. Compilazione „ Le fasi di analisi sintattica si alternano nel modo seguente, con una modalità di seguente compilazione multi-passo „ Passo 2: Top-down Optimizer „ Non appena un sottoalbero dell'AST viene prodotto, prodotto viene scandito dalla radice alle foglie per eventuali ottimizzazioni Linguaggi dinamici – A.A. 2009/2010 16
  • 17. Compilazione „ Le fasi di analisi sintattica si alternano nel modo seguente, con una modalità di seguente compilazione multi-passo „ Passo 3: Peephole Optimizer „ Alcune porzioni di codice hanno un loro spazio di memorizzazione locale per le variabili „ Singole Subroutine (variabili locali) „ Si Singoli file (variabili globali) li fil ( i bili l b li) „ Stringhe contenenti codice (eval()) Linguaggi dinamici – A.A. 2009/2010 17
  • 18. Compilazione „ Le fasi di analisi sintattica si alternano nel modo seguente, con una modalità di seguente compilazione multi-passo „ Passo 3: Peephole Optimizer „ Il peephole optimizer ottimizza tali porzioni di codice in maniera sequenziale „ Controlla se esiste codice non raggiungibile (lo cancella, in tal caso) cancella „ Controlla se una funzione è invocata prima che il suo prototipo sia stato compilato „ Cerca di risolvere le espressioni costanti il più presto possibile (Constant f ldi ) iù t ibil (C t t folding) Linguaggi dinamici – A.A. 2009/2010 18
  • 19. Compilazione „ Constant folding: l'ottimizzatore trova operazioni con operandi tutti costanti, calcola costanti l'espressione finale e sostituisce all espressione all'espressione di partenza il suo risultato „ Per operando si intende anche il valore di ritorno di una funzione! „ Ad esempo, se nell'AST di esempio si sostituiscono a $b e $c due espressioni costanti qualunque, tali che il risultato della valutazione del sottoalbero AST con radice pari al nodo 4 sia -42, si ottiene il seguente AST ottimizzato equivalente Linguaggi dinamici – A.A. 2009/2010 19
  • 21. Compilazione ƒ Strength reduction: rimpiazza operazioni “lente” con operazioni equivalenti e più veloci lente ƒ Esempio: ƒ mul ax,2 Æ shift_left ax ƒ Null sequences: elimina operazioni inutili ƒ Esempio: ƒ mov r0 i; mov i r0 Æ mov r0 i r0, i, r0, Linguaggi dinamici – A.A. 2009/2010 21
  • 22. Compilazione ƒ Combine Operations: rimpiazza un insieme di operazioni con una operazione singola equivalente ƒ Al b i L Algebraic Laws: usa l leggi algebriche per i l bi h semplificare o riordinare le istruzioni ƒ Special Case Instructions: usa istruzioni “speciali” progettate per specifici operandi Linguaggi dinamici – A.A. 2009/2010 22
  • 23. Compilazione „ A questo punto, la compilazione è terminata „ Si può inspezionare l'AST prodotto con il comando perl -MO=Concise,-src file.pl „ Se si era invocato il servizio di controllo sintattico del programma (perl -c source.pl), il compilatore ci informa del risultato dell'analisi sintattica „ Altrimenti, si passa allo stadio successivo, che nella nostra trattazione limitata è l'interprete „ Ma può anche essere un altro compilatore (p (perlcc -o hello hello.pl) p) Linguaggi dinamici – A.A. 2009/2010 23
  • 24. Interprete „ L'interprete Perl esegue gli opcode dell'AST nella sequenza specificata „ L'interprete usa una macchina basata su stack per eseguire il codice „ Gli opcode manipolano gli operandi che vengono i inseriti nello stack, secondo una iti ll t k d modalità molto simile alla notazione polacca inversa „ Push a, Push b „ Opcode (pop a, pop b, calcolo, push risultato) Linguaggi dinamici – A.A. 2009/2010 24
  • 25. Interprete „ L'interprete Perl crea diversi stack, fra gli altri: „ Operand stack: memorizzazione degli operandi degli operatori „ Save stack: memorizzazione delle variabili il cui S t k i i d ll i bili i scope è stato alterato da altre „ E Es.: variabile globale i il cui valore è stato i bil l b l i, i l t t offuscato dalla variabile locale i all'interno di una funzione „ Return stack: memorizzazione degli indirizzi di ritorno delle funzioni Linguaggi dinamici – A.A. 2009/2010 25