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