SlideShare a Scribd company logo
1 of 19
Download to read offline
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

More Related Content

What's hot

I linguaggi di programmazione
I linguaggi di programmazione I linguaggi di programmazione
I linguaggi di programmazione Piera Ingala
 
Presentazione tesi - Francesca Germani
Presentazione tesi - Francesca GermaniPresentazione tesi - Francesca Germani
Presentazione tesi - Francesca GermaniRubina Beneduce
 
Internazionalizzazione e localizzazione del software
Internazionalizzazione e localizzazione del softwareInternazionalizzazione e localizzazione del software
Internazionalizzazione e localizzazione del softwareChristian Castelli
 
Cose un cat_tool
Cose un cat_toolCose un cat_tool
Cose un cat_toolKarenVacca
 

What's hot (6)

I linguaggi di programmazione
I linguaggi di programmazione I linguaggi di programmazione
I linguaggi di programmazione
 
T5 memoria
T5 memoriaT5 memoria
T5 memoria
 
Presentazione tesi - Francesca Germani
Presentazione tesi - Francesca GermaniPresentazione tesi - Francesca Germani
Presentazione tesi - Francesca Germani
 
Corporate Translation Management By Soget
Corporate Translation Management By SogetCorporate Translation Management By Soget
Corporate Translation Management By Soget
 
Internazionalizzazione e localizzazione del software
Internazionalizzazione e localizzazione del softwareInternazionalizzazione e localizzazione del software
Internazionalizzazione e localizzazione del software
 
Cose un cat_tool
Cose un cat_toolCose un cat_tool
Cose un cat_tool
 

Viewers also liked

Viewers also liked (20)

T4 tipizzazione
T4 tipizzazioneT4 tipizzazione
T4 tipizzazione
 
T8 supporti
T8 supportiT8 supporti
T8 supporti
 
T3 esempio runtime
T3 esempio runtimeT3 esempio runtime
T3 esempio runtime
 
Pe t1 perl-intro
Pe t1 perl-introPe t1 perl-intro
Pe t1 perl-intro
 
T7 librerie
T7 librerieT7 librerie
T7 librerie
 
UE week 2
UE week 2UE week 2
UE week 2
 
Pe a1 perl-unit_testing
Pe a1 perl-unit_testingPe a1 perl-unit_testing
Pe a1 perl-unit_testing
 
T6 codice
T6 codiceT6 codice
T6 codice
 
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 a3 python-metaprogramming
Py a3 python-metaprogrammingPy a3 python-metaprogramming
Py a3 python-metaprogramming
 
Py a2 python-documentazione
Py a2 python-documentazionePy a2 python-documentazione
Py a2 python-documentazione
 
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 a1 python-unit_testing
Py a1 python-unit_testingPy a1 python-unit_testing
Py a1 python-unit_testing
 
Py a6 python-database
Py a6 python-databasePy a6 python-database
Py a6 python-database
 
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
 

Similar to T1 introduzione

Iced tea, la macchina virtuale Java libera
Iced tea, la macchina virtuale Java liberaIced tea, la macchina virtuale Java libera
Iced tea, la macchina virtuale Java liberaVitalij Zadneprovskij
 
Meego Italian Day 2011 - Francesco Baldassarri (1)
Meego Italian Day 2011 - Francesco Baldassarri (1)Meego Italian Day 2011 - Francesco Baldassarri (1)
Meego Italian Day 2011 - Francesco Baldassarri (1)Francesco Baldassarri
 
Lucidi relativi al DVD di Programmazione in C
Lucidi relativi al DVD di Programmazione in CLucidi relativi al DVD di Programmazione in C
Lucidi relativi al DVD di Programmazione in CFulvio Corno
 
Mobile platforms development overview
Mobile platforms development overviewMobile platforms development overview
Mobile platforms development overviewAlfredo Morresi
 
Un Grande Informatico
Un Grande InformaticoUn Grande Informatico
Un Grande Informaticoguest7f82ed
 
Webinar porting e ottimizzazione per x86
Webinar   porting e ottimizzazione per x86Webinar   porting e ottimizzazione per x86
Webinar porting e ottimizzazione per x86Massimiliano Torregiani
 
Funzionalità e portabilità dei sistemi operativi per piattaforme mobili
Funzionalità e portabilità dei sistemi operativi per piattaforme mobiliFunzionalità e portabilità dei sistemi operativi per piattaforme mobili
Funzionalità e portabilità dei sistemi operativi per piattaforme mobiliNicola Losito
 
Other languages ita
Other languages itaOther languages ita
Other languages itaMetroCount
 
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
 
Nativo vs Xamarin pro e contro
Nativo vs Xamarin pro e controNativo vs Xamarin pro e contro
Nativo vs Xamarin pro e controCarmelo Ruota
 
Nativo vs Xamarin: pro e contro
Nativo vs Xamarin: pro e controNativo vs Xamarin: pro e contro
Nativo vs Xamarin: pro e controMarco Rinaldi
 
I linguaggi di programmazione e il mondo open-source
I linguaggi di programmazione e il mondo open-sourceI linguaggi di programmazione e il mondo open-source
I linguaggi di programmazione e il mondo open-sourceBergamo Linux Users Group
 
Smau milano 2012 arena social media massimo-grava
Smau milano 2012   arena social media massimo-gravaSmau milano 2012   arena social media massimo-grava
Smau milano 2012 arena social media massimo-gravaSMAU
 
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
 
Introduzione al web (2/2) - 18/19
Introduzione al web (2/2) - 18/19Introduzione al web (2/2) - 18/19
Introduzione al web (2/2) - 18/19Giuseppe Vizzari
 
Introduction to HTML
Introduction to HTMLIntroduction to HTML
Introduction to HTMLRoberto Dadda
 

Similar to T1 introduzione (20)

2006 Py01 intro
2006 Py01 intro2006 Py01 intro
2006 Py01 intro
 
Introduzione a .Net Core
Introduzione a .Net CoreIntroduzione a .Net Core
Introduzione a .Net Core
 
Iced tea, la macchina virtuale Java libera
Iced tea, la macchina virtuale Java liberaIced tea, la macchina virtuale Java libera
Iced tea, la macchina virtuale Java libera
 
Meego Italian Day 2011 - Francesco Baldassarri (1)
Meego Italian Day 2011 - Francesco Baldassarri (1)Meego Italian Day 2011 - Francesco Baldassarri (1)
Meego Italian Day 2011 - Francesco Baldassarri (1)
 
Lucidi relativi al DVD di Programmazione in C
Lucidi relativi al DVD di Programmazione in CLucidi relativi al DVD di Programmazione in C
Lucidi relativi al DVD di Programmazione in C
 
Applicazioni open source
Applicazioni open sourceApplicazioni open source
Applicazioni open source
 
Mobile platforms development overview
Mobile platforms development overviewMobile platforms development overview
Mobile platforms development overview
 
Un Grande Informatico
Un Grande InformaticoUn Grande Informatico
Un Grande Informatico
 
Webinar porting e ottimizzazione per x86
Webinar   porting e ottimizzazione per x86Webinar   porting e ottimizzazione per x86
Webinar porting e ottimizzazione per x86
 
Funzionalità e portabilità dei sistemi operativi per piattaforme mobili
Funzionalità e portabilità dei sistemi operativi per piattaforme mobiliFunzionalità e portabilità dei sistemi operativi per piattaforme mobili
Funzionalità e portabilità dei sistemi operativi per piattaforme mobili
 
Other languages ita
Other languages itaOther languages ita
Other languages ita
 
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 - ...
 
Nativo vs Xamarin pro e contro
Nativo vs Xamarin pro e controNativo vs Xamarin pro e contro
Nativo vs Xamarin pro e contro
 
Nativo vs Xamarin: pro e contro
Nativo vs Xamarin: pro e controNativo vs Xamarin: pro e contro
Nativo vs Xamarin: pro e contro
 
I linguaggi di programmazione e il mondo open-source
I linguaggi di programmazione e il mondo open-sourceI linguaggi di programmazione e il mondo open-source
I linguaggi di programmazione e il mondo open-source
 
Conferenza Pymaemo
Conferenza PymaemoConferenza Pymaemo
Conferenza Pymaemo
 
Smau milano 2012 arena social media massimo-grava
Smau milano 2012   arena social media massimo-gravaSmau milano 2012   arena social media massimo-grava
Smau milano 2012 arena social media massimo-grava
 
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#
 
Introduzione al web (2/2) - 18/19
Introduzione al web (2/2) - 18/19Introduzione al web (2/2) - 18/19
Introduzione al web (2/2) - 18/19
 
Introduction to HTML
Introduction to HTMLIntroduction to HTML
Introduction to HTML
 

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

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
 

T1 introduzione

  • 1. Parte 1 Cenni storici Linguaggi dinamici – A.A. 2009/2010 1
  • 2. 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
  • 3. 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
  • 4. 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
  • 5. 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
  • 6. 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
  • 7. Un rapido sguardo ai giorni nostri Linguaggi dinamici – A.A. 2009/2010 7
  • 8. Un rapido sguardo ai giorni nostri Linguaggi dinamici – A.A. 2009/2010 8
  • 9. 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
  • 10. 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
  • 11. 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
  • 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 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
  • 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 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
  • 18. 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
  • 19. 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