Parte 1




                             Cenni storici




Linguaggi dinamici – A.A. 2009/2010
                                             1
Un po’ di storia (1970-1980)
„   L'invenzione dei linguaggi riflette il periodo
    storico e le necessità dei programmatori
„   Sistemi di grandi dimensioni:
      „   sistemi di calcolo di grandi dimensioni
           i t i       l l          di di    i i
      „   interfacce testuali
      „   Amministrazione di mainframe (scripting)
„   Tali necessità hanno portato a:
                         p
      „   C (veloce, poco portabile, adatto al calcolo)
      „   Assembly (molto veloce, non portabile, adatto
                              veloce     portabile
          all'interfacciamento con l'hardware)
      „   Shell (lento portabile, adatto per manutenzione)
                 (lento, portabile
Linguaggi dinamici – A.A. 2009/2010
                                                             2
Un po’ di storia (1980-1990)
„   L'informatica prende piede su media e piccola
    scala
      „   Singoli PC (Workstation)
      „   Reti l
          R ti locali
                   li
„   Sempre più persone hanno il compito di
    “amministrare” un calcolatore
„   Nasce il primo linguaggio di scripting “serio”:
    Perl (Larry Wall, 1987)
      „   Portabile
      „   Orientato alla manipolazione dei file di testo
          (utile per gestire le configurazioni)
Linguaggi dinamici – A.A. 2009/2010
                                                           3
Un po’ di storia (1990-2000)
„   Invenzione (1991) e successivo boom (1995)
    del World Wide Web
„   Nascono linguaggi nuovi per poter
    programmare applicazioni Web based con
                              Web-based
    maggiore semplicità rispetto al C
      „   PHP (PHP H
              (PHP: Hypertext P
                         t t Preprocessor), 1994
                                         )
„   I linguaggi esistenti si adattano per non
    perdere terreno
      „   Perl
      „   C


Linguaggi dinamici – A.A. 2009/2010
                                                   4
Un po’ di storia (1990-2000)
„   I programmatori cominciano a comprendere a
    fondo due grandi verità
      „   L'hardware delle macchine diventa più potente
          con un ritmo simile alla legge di Moore
      „   Scrivere codice a basso livello diventa sempre
          più difficile, per via dell aumentata complessità
              difficile          dell'aumentata
          delle architetture
„   Comincia a diffondersi il concetto di
    “linguaggio ad alto livello general purpose”
      „   Python (G id Van R
          P th   (Guido V Rossum, 1991)
      „   Ruby (Yukihiro Matsumoto, 1993)
      „   Java (James Gosling, 1995)
Linguaggi dinamici – A.A. 2009/2010
                                                              5
Un po’ di storia (2000-)
„   L'uso dei linguaggi di alto livello si estende a
    progetti su larga scala
„   I programmatori si rendono conto che il ciclo
    di sviluppo del software è più semplice e breve
„   I linguaggi di alto livello sono corredati di una
    miriade di librerie per le funzioni più disparate
       ii d    lib i         l f   i i iù di        t
„   Nasce il framework: linguaggio ad alto livello
    unito ad una serie di librerie general-purpose
      „   C#/.NET (Anders Hejlsberg, 2000)
                  (          j    g,      )
      „   Mono (Miguel De Icaza, Novell, 2001)


Linguaggi dinamici – A.A. 2009/2010
                                                        6
Un rapido sguardo ai giorni nostri




Linguaggi dinamici – A.A. 2009/2010
                                           7
Un rapido sguardo ai giorni nostri




Linguaggi dinamici – A.A. 2009/2010
                                           8
I segreti del successo
„   I cardini del successo dei linguaggi di
    scripting,
    scripting dei linguaggi di alto livello, dei
                                    livello
    framework sono sempre gli stessi
      „   Assenza di dettagli ostici (puntatori gestione
                                     (puntatori,
          della memoria): il programmatore si concentra
          esclusivamente sul problema da risolvere
      „   Presenza massiccia di librerie:
          il programmatore scrive solo il codice che serve
      „   Portabilità: il programmatore scrive il codice
          solo una volta



Linguaggi dinamici – A.A. 2009/2010
                                                             9
Assenza di dettagli ostici
„   Nei linguaggi come il C, al programmatore è
    lasciato ogni dettaglio:
      „   Gestione della memoria
      „   Gestione dei puntatori
          G ti      d i     t t i
      „   Rilascio delle risorse
„   Tali task non sono funzionali al problema che
    si intende risolvere, e rallentano il ciclo di
    sviluppo del software
„   Nei linguaggi di scripting moderni, tali aspetti
           g gg          p g             ,       p
    sono gestiti automaticamente

Linguaggi dinamici – A.A. 2009/2010
                                                       10
Presenza massiccia di librerie
„   Nei linguaggi come il C, la vera libreria di
    riferimento è la libreria del C
      „   Piuttosto complessa da usare
      „   Fornisce solo servizi “di base”
          F    i      l     i i     b   ”
„   Parecchi dei compiti richiesti da un applicativo
    moderno non sono presi in considerazione
      „   Servizi di calcolo scientifico, interfacce grafiche
          complesse, supporto per il Web
„   Nei linguaggi di scripting moderni, tali
           g gg          p g
    funzionalità sono fornite da apposite librerie


Linguaggi dinamici – A.A. 2009/2010
                                                                11
Portabilità
„   Nei linguaggi come il C, la portabilità si ottiene
    tramite strumenti a dir poco complessi
    (autotools, codice condizionato)
      „   Richiede parecchio lavoro allo sviluppatore
          (scrittura delle macro AC_XYZ)
      „   Utilizzo non immediato per l utente inesperto
                                       l'utente
          (./configure –prefix=/usr/local ...)
„   Nei linguaggi di scripting moderni il codice
                               moderni,
    scritto è perfettamente portabile
      „   funziona in diversi ambienti operativi senza
          f   i    i di     i   bi ti       ti i
          alcuna modifica

Linguaggi dinamici – A.A. 2009/2010
                                                          12
Parte 1




                  I linguaggi dinamici
                       g gg




Linguaggi dinamici – A.A. 2009/2010
                                         13
Linguaggi statici e dinamici
„   Linguaggio statico: è un linguaggio ad alto
    livello in cui le operazioni effettuate a livello di
    esecuzione (run time) sono legate (quasi)
    esc us a e te all'esecuzione di codice
    esclusivamente a esecu o e d cod ce (se s         si
    esclude la gestione dello stack)
      „   C, assembly
„   Linguaggio dinamico: è un linguaggio ad alto
    livello in cui le operazioni effettuate a livello di
    esecuzione (run time) non sono legate
    esclusivamente all'esecuzione di codice
                       all esecuzione
      „   Java, Perl, Python, Ruby

Linguaggi dinamici – A.A. 2009/2010
                                                           14
Linguaggio statico
„   Ha una fase di compilazione, in cui il codice
    sorgente viene tradotto in un formato a basso
    livello esclusivo per l'architettura considerata
„   La traduzione da codice sorgente a codice
    macchina è 1:1 (rappresentazione fedele)
„   Fornisce tipi di dati semplici, identificati a
    F     i    ti i d ti       li i id tifi ti
    livello di compilazione e difficilmente mutabili
    attempo di esecuzione
                       i
„   Permette l'esecuzione ad una velocità elevata
„   Non fornisce strumenti di controllo, né
    semplificazioni; è tutto lasciato al
         p
    programmatore
Linguaggi dinamici – A.A. 2009/2010
                                                       15
Linguaggio dinamico
„   Ha una fase di compilazione, in cui il codice
    sorgente viene tradotto in un formato a basso
    livello indipendente dall'architettura
    co s de ata
    considerata (bytecode)
„   Il bytecode viene interpretato in maniera
    efficiente da un interprete tenendo conto
                      interprete,
    dell'architettura considerata
„   L'esecuzione non è così veloce come in un
    linguaggio statico
„   L'interprete si serve di alcune funzioni interne
      'i           i          l     f    i ii
    per allocare, deallocare, referenziare memoria
    in
    i maniera automatica
            i       t    ti
Linguaggi dinamici – A.A. 2009/2010
                                                       16
L'ambiguità dei linguaggi dinamici
„   Un'altra caratteristica saliente dei linguaggi
    dinamici è quella di sapersi “modificare”
                                   modificare
    durante l'esecuzione (Metaprogramming)
      „   Eseguire funzioni diverse a seconda delle
          condizioni operative
      „   Cambiare il codice di una funzione
      „   Creare strutture dati di forma “variabile” nel
          tempo




Linguaggi dinamici – A.A. 2009/2010
                                                           17
Linguaggi dinamici: pro e contro
„   Pro:
      „   La scrittura di codice è estremamente
          semplificata rispetto ai linguaggi statici
      „   La
          L scrittura di un software diventa la scrittura
                 itt           ft      di   t l      itt
          del suo scheletro, grazie alla presenza delle
          librerie
      „   Funziona su ogni piattaforma (o quasi...)
„   Contro:
    C
      „   Estremamente più lento (~10 volte) del codice
          macchina nativo
      „   Incoraggia la programmazione “sloppy”

Linguaggi dinamici – A.A. 2009/2010
                                                            18
Google Go
ƒ Google ha recentemente (nov 2009) introdotto il
  linguaggio Go
ƒ Linguaggio dinamico Æ semplicità
      g gg                    p
ƒ Ma con una attenzione alla velocità di
  esecuzione
ƒ Non ad oggetti (!)
ƒ htt //
  http://www.golang.org
               l




Linguaggi dinamici – A.A. 2009/2010
                                                    19

T1 introduzione

  • 1.
    Parte 1 Cenni storici Linguaggi dinamici – A.A. 2009/2010 1
  • 2.
    Un po’ distoria (1970-1980) „ L'invenzione dei linguaggi riflette il periodo storico e le necessità dei programmatori „ Sistemi di grandi dimensioni: „ sistemi di calcolo di grandi dimensioni i t i l l di di i i „ interfacce testuali „ Amministrazione di mainframe (scripting) „ Tali necessità hanno portato a: p „ C (veloce, poco portabile, adatto al calcolo) „ Assembly (molto veloce, non portabile, adatto veloce portabile all'interfacciamento con l'hardware) „ Shell (lento portabile, adatto per manutenzione) (lento, portabile Linguaggi dinamici – A.A. 2009/2010 2
  • 3.
    Un po’ distoria (1980-1990) „ L'informatica prende piede su media e piccola scala „ Singoli PC (Workstation) „ Reti l R ti locali li „ Sempre più persone hanno il compito di “amministrare” un calcolatore „ Nasce il primo linguaggio di scripting “serio”: Perl (Larry Wall, 1987) „ Portabile „ Orientato alla manipolazione dei file di testo (utile per gestire le configurazioni) Linguaggi dinamici – A.A. 2009/2010 3
  • 4.
    Un po’ distoria (1990-2000) „ Invenzione (1991) e successivo boom (1995) del World Wide Web „ Nascono linguaggi nuovi per poter programmare applicazioni Web based con Web-based maggiore semplicità rispetto al C „ PHP (PHP H (PHP: Hypertext P t t Preprocessor), 1994 ) „ I linguaggi esistenti si adattano per non perdere terreno „ Perl „ C Linguaggi dinamici – A.A. 2009/2010 4
  • 5.
    Un po’ distoria (1990-2000) „ I programmatori cominciano a comprendere a fondo due grandi verità „ L'hardware delle macchine diventa più potente con un ritmo simile alla legge di Moore „ Scrivere codice a basso livello diventa sempre più difficile, per via dell aumentata complessità difficile dell'aumentata delle architetture „ Comincia a diffondersi il concetto di “linguaggio ad alto livello general purpose” „ Python (G id Van R P th (Guido V Rossum, 1991) „ Ruby (Yukihiro Matsumoto, 1993) „ Java (James Gosling, 1995) Linguaggi dinamici – A.A. 2009/2010 5
  • 6.
    Un po’ distoria (2000-) „ L'uso dei linguaggi di alto livello si estende a progetti su larga scala „ I programmatori si rendono conto che il ciclo di sviluppo del software è più semplice e breve „ I linguaggi di alto livello sono corredati di una miriade di librerie per le funzioni più disparate ii d lib i l f i i iù di t „ Nasce il framework: linguaggio ad alto livello unito ad una serie di librerie general-purpose „ C#/.NET (Anders Hejlsberg, 2000) ( j g, ) „ Mono (Miguel De Icaza, Novell, 2001) Linguaggi dinamici – A.A. 2009/2010 6
  • 7.
    Un rapido sguardoai giorni nostri Linguaggi dinamici – A.A. 2009/2010 7
  • 8.
    Un rapido sguardoai giorni nostri Linguaggi dinamici – A.A. 2009/2010 8
  • 9.
    I segreti delsuccesso „ I cardini del successo dei linguaggi di scripting, scripting dei linguaggi di alto livello, dei livello framework sono sempre gli stessi „ Assenza di dettagli ostici (puntatori gestione (puntatori, della memoria): il programmatore si concentra esclusivamente sul problema da risolvere „ Presenza massiccia di librerie: il programmatore scrive solo il codice che serve „ Portabilità: il programmatore scrive il codice solo una volta Linguaggi dinamici – A.A. 2009/2010 9
  • 10.
    Assenza di dettagliostici „ Nei linguaggi come il C, al programmatore è lasciato ogni dettaglio: „ Gestione della memoria „ Gestione dei puntatori G ti d i t t i „ Rilascio delle risorse „ Tali task non sono funzionali al problema che si intende risolvere, e rallentano il ciclo di sviluppo del software „ Nei linguaggi di scripting moderni, tali aspetti g gg p g , p sono gestiti automaticamente Linguaggi dinamici – A.A. 2009/2010 10
  • 11.
    Presenza massiccia dilibrerie „ Nei linguaggi come il C, la vera libreria di riferimento è la libreria del C „ Piuttosto complessa da usare „ Fornisce solo servizi “di base” F i l i i b ” „ Parecchi dei compiti richiesti da un applicativo moderno non sono presi in considerazione „ Servizi di calcolo scientifico, interfacce grafiche complesse, supporto per il Web „ Nei linguaggi di scripting moderni, tali g gg p g funzionalità sono fornite da apposite librerie Linguaggi dinamici – A.A. 2009/2010 11
  • 12.
    Portabilità „ Nei linguaggi come il C, la portabilità si ottiene tramite strumenti a dir poco complessi (autotools, codice condizionato) „ Richiede parecchio lavoro allo sviluppatore (scrittura delle macro AC_XYZ) „ Utilizzo non immediato per l utente inesperto l'utente (./configure –prefix=/usr/local ...) „ Nei linguaggi di scripting moderni il codice moderni, scritto è perfettamente portabile „ funziona in diversi ambienti operativi senza f i i di i bi ti ti i alcuna modifica Linguaggi dinamici – A.A. 2009/2010 12
  • 13.
    Parte 1 I linguaggi dinamici g gg Linguaggi dinamici – A.A. 2009/2010 13
  • 14.
    Linguaggi statici edinamici „ Linguaggio statico: è un linguaggio ad alto livello in cui le operazioni effettuate a livello di esecuzione (run time) sono legate (quasi) esc us a e te all'esecuzione di codice esclusivamente a esecu o e d cod ce (se s si esclude la gestione dello stack) „ C, assembly „ Linguaggio dinamico: è un linguaggio ad alto livello in cui le operazioni effettuate a livello di esecuzione (run time) non sono legate esclusivamente all'esecuzione di codice all esecuzione „ Java, Perl, Python, Ruby Linguaggi dinamici – A.A. 2009/2010 14
  • 15.
    Linguaggio statico „ Ha una fase di compilazione, in cui il codice sorgente viene tradotto in un formato a basso livello esclusivo per l'architettura considerata „ La traduzione da codice sorgente a codice macchina è 1:1 (rappresentazione fedele) „ Fornisce tipi di dati semplici, identificati a F i ti i d ti li i id tifi ti livello di compilazione e difficilmente mutabili attempo di esecuzione i „ Permette l'esecuzione ad una velocità elevata „ Non fornisce strumenti di controllo, né semplificazioni; è tutto lasciato al p programmatore Linguaggi dinamici – A.A. 2009/2010 15
  • 16.
    Linguaggio dinamico „ Ha una fase di compilazione, in cui il codice sorgente viene tradotto in un formato a basso livello indipendente dall'architettura co s de ata considerata (bytecode) „ Il bytecode viene interpretato in maniera efficiente da un interprete tenendo conto interprete, dell'architettura considerata „ L'esecuzione non è così veloce come in un linguaggio statico „ L'interprete si serve di alcune funzioni interne 'i i l f i ii per allocare, deallocare, referenziare memoria in i maniera automatica i t ti Linguaggi dinamici – A.A. 2009/2010 16
  • 17.
    L'ambiguità dei linguaggidinamici „ Un'altra caratteristica saliente dei linguaggi dinamici è quella di sapersi “modificare” modificare durante l'esecuzione (Metaprogramming) „ Eseguire funzioni diverse a seconda delle condizioni operative „ Cambiare il codice di una funzione „ Creare strutture dati di forma “variabile” nel tempo Linguaggi dinamici – A.A. 2009/2010 17
  • 18.
    Linguaggi dinamici: proe contro „ Pro: „ La scrittura di codice è estremamente semplificata rispetto ai linguaggi statici „ La L scrittura di un software diventa la scrittura itt ft di t l itt del suo scheletro, grazie alla presenza delle librerie „ Funziona su ogni piattaforma (o quasi...) „ Contro: C „ Estremamente più lento (~10 volte) del codice macchina nativo „ Incoraggia la programmazione “sloppy” Linguaggi dinamici – A.A. 2009/2010 18
  • 19.
    Google Go ƒ Googleha recentemente (nov 2009) introdotto il linguaggio Go ƒ Linguaggio dinamico Æ semplicità g gg p ƒ Ma con una attenzione alla velocità di esecuzione ƒ Non ad oggetti (!) ƒ htt // http://www.golang.org l Linguaggi dinamici – A.A. 2009/2010 19