Linguaggi di programmazione - Dipartimento di Informatica e

Corso di Laurea Ingegneria Informatica
Fondamenti di Informatica
Dispensa 07
Traduzione ed esecuzione di
programmi
Carla Limongelli
Ottobre 2010
Traduzione ed esecuzione di programmi
1
Prerequisiti
q Architettura calcolatore
q Sistema di numerazione in base 2
q Sistema operativo
http://www.dia.uniroma3.it/~java/fondinf/
La rappresentazione dell’informazione
2
Contenuti
q Traduzione ed esecuzione di programmi
§ Dalla definizione del problema alla sua esecuzione
q Compilatori ed interpreti
q L’approccio misto di Java
q L’uso di ambienti di sviluppo integrati (IDE)
http://www.dia.uniroma3.it/~java/fondinf/
La rappresentazione dell’informazione
3
Obiettivi (competenze da acquisire)
Al termine dell’unita’ didattica lo studente sarà in grado di
q Capire la distinzione tra un linguaggio di lato livello e
uno di basso livello
q Distinguere un linguaggio compilato da uno
interpretato
q Distinguere le varie fasi del processo di realizzazione
di un programma: dall’editor del testo alla traduzione
del programma in linguaggio macchina
q Capire il ruolo che svolge la Java Virtual Machine
http://www.dia.uniroma3.it/~java/fondinf/
La rappresentazione dell’informazione
4
Calcolatori e programmazione
q Un calcolatore è una macchina per eseguire
programmi
§ qualcuno ha già fatto per noi alcuni programmi che
possiamo eseguire così come facciamo con ogni
applicazione
q Un calcolatore è anche una macchina
programmabile, ossia una macchina le cui
potenzialità possono essere aumentate da noi con
la scrittura di nuovi programmi
§ per far questo dobbiamo far uso di opportuni linguaggi
di programmazione che ci permettono di esprimere nel
modo più naturale le nostre esigenze di calcolo
Traduzione ed esecuzione di programmi
5
Linguaggi di programmazione
q Ogni calcolatore ha un proprio linguaggio macchina
§ ogni istruzione coincide con un’istruzione di macchina e
pertanto è un linguaggio binario o anche di linguaggi a
basso livello
q Esistono linguaggi di programmazione che
consentono di scrivere i programmi in termini di
istruzioni “vicine” alla logica delle tecniche di
risoluzione di problemi
§ le istruzioni sono espresse mediante simboli e pertanto tali
linguaggi sono anche detti linguaggi simbolici o linguaggi
ad alto livello
§ sono linguaggi simbolici anche i linguaggi assemblativi, in
cui ad ogni istruzione del linguaggio corrispondono una o
più (poche) istruzioni di macchina
Traduzione ed esecuzione di programmi
6
Dal problema alla sua esecuzione…
q Problema:
a x2 + b x + c = 0
q Linguaggio a molto alto livello:
SOLVE (A, B, C)
A,B,C: coefficienti dell’equazione
X: soluzioni
Traduzione ed esecuzione di programmi
7
…Dal problema alla sua esecuzione…
q Linguaggio ad alto livello
§ esplicita il modo in cui devono essere calcolate le soluzioni
..................
readln (A, B, C);
D ßB**2-4*A*C;
if (D ≥ 0)
then
{
E ß SQRT (D);
X1 ß (-B + E) / (2 * A);
X2 ß (-B - E) / (2 * A);
writeln (X1, X2)
}
else
{
writeln (“L’equazione non ammette soluzioni reali”)
}
..................
Traduzione ed esecuzione di programmi
8
…Dal problema alla sua esecuzione…
q Linguaggio intermedio
§ Non sa eseguire l’elevamento a potenza,
§ Puo’ eseguire solo un’operazione alla volta
D1 := B * B
D2 := 4 * A
D3 := D2 * C
D := D1 - D3
q Linguaggio macchina
§ Per eseguire una singola operazione
R1 ß B
R2ß
ßB
R1ß
ßR1 * R2
Cß
ßR1
CßB*B
Traduzione ed esecuzione di programmi
9
…Dal problema alla sua esecuzione…
q Complessivamente
R1 ß
R2 ß
R1 ß
D1 ß
R1 ß
R2 ß
R1 ß
R2 ß
R1 ß
R2 ß
R1 ß
D ß
B
B
R1
R1
4
A
R1
C
R1
D1
R2
R1
* R2
* R2
* R2
- R1
Traduzione ed esecuzione di programmi
10
…Dal problema alla sua esecuzione…
q Come vengono tradotte le istruzioni in linguaggio
macchina
§ Consideriamo un linguaggio macchina semplificato
§ L’istruzione occupa una sola locazione in memoria centrale
ed e’ costituita da
Codice istruzione
Indirizzo Operando
Abbreivazioni:
§ IND
indirizzo di memoria
§ ACC registro accumulatore
§ ß
trasferimento
§ UL
unita’ di lettura
§ US
unita’ di scrittura
§ (X)
contenuto di X
Traduzione ed esecuzione di programmi
11
…Dal problema alla sua esecuzione…
q Supponiamo di avere a disposizione un linguaggio
ridotto in cui troviamo solo operazioni di somma,
sottrazione, caricamento, memorizzazione lettura e
scrittura:
sintassi
semantica
Codice
istruzione
operando
00000001 IND
ACC ß ACC + IND
somma
00000010 IND
ACC ß ACC - IND
sottrazione
00000011 IND
ACC ß IND
caricamento
00000100 IND
IND ß ACC
memorizzzione
00000101 IND
IND ß UL
lettura
00000110 IND
US ß IND
scrittura
Traduzione ed esecuzione di programmi
12
…Dal problema alla sua esecuzione…
Supponiamo di eseguire la somma di due valori che vengono memorizzati in
0000000000 e 0000000001
Inidirizzo
in memoria
Istruzione
Semantica o nome
simbolico
00000000
00000000 00001000
IND1
00000001
00000000 00001101
IND2
00000010
00000000 00010101
IND3
…
…
00010000
00000011 00000000
ACC ß (IND1)
00010001
00000001 00000001
ACC ß (ACC) + (IND2)
00010010
00000100 00000010
IND3 ß (ACC)
Traduzione ed esecuzione di programmi
13
…Dal problema alla sua esecuzione…
q Ogni isturzione in memoria centrale, a sua volta,
viene eseguita in 3 fasi:
§ fetch (lettura)
• legge dalla memoria la prossima istruzione da eseguire
§ decode (decodifica)
• determina il tipo di istruzione che deve essere eseguito
§ execute (esecuzione)
• richiede lo svolgimento di tutte le azioni necessarie per l’esecuzione
dell’istruzione — ciascuna azione viene richiesta al componente
opportuno
Traduzione ed esecuzione di programmi
14
Le fasi della traduzione
a x2 + b x + c = 0
D ßB**2-4*A*C;
R1 ß B
if(D ≥ 0)
R2 ß B
then
{
R1 ß R1 *
E ß SQRT (D);
R2
X1 ß (-B + E) /
D1 ß R1
(2 * A);
R1 ß 4
Linguaggio
Linguaggio
X2 ß (-B - E) /
R2 ß A
SOLVE (A,B,C)
assemblativo
macchina
(2 * A);
R1 ß R1 *
writeln (X1, X2)
R2
}
ACC ß (IND2)
00000011 00000000
R2 ß C
else
{
R1 ß R1 *
00000010 00000001
ACC ßACC-(IND1)
E ß SQRT (-D);
R2
00000100 00000010
IND3 ß ACC
X1 ß -B / (2 *
R2 ß D1
Linguaggio
a
A);
R1 ß R2 X21 ß E / (2 *
basso
R1 livello
A);
D ß R1
X22adßalto
-E livello
/ (2 *
Linguaggio
A);
(X1, X21,
L’unica differenzawriteln
tra un linguaggio
assembler e un linguaggio macchina e’ che
X22)
Solo
} quest’ultimo puo’ essere eseguito dalla CPU
Traduzione ed esecuzione di programmi
15
Compilazione
q Il calcolatore con un programma
compilatore, ricevendo un programma
sorgente in linguaggio simbolico esegue la
traduzione producendo in uscita il
corrispondente programma eseguibile in
linguaggio macchina
programma
sorgente
elaboratore
(compilatore)
Traduzione ed esecuzione di programmi
programma
eseguibile
16
Esecuzione dei programmi
q Il Calcolatore, in particolare il suo hardware, esegue
solo programmi in linguaggio macchina
q Se un programma è in linguaggio macchina può
essere quindi direttamente eseguibile
§ tutte le applicazioni sono immediatamente eseguibili
proprio per questo motivo
q Se un programma è in linguaggio simbolico non può
essere eseguito immediatamente
§ c’è bisogno di un processo di traduzione che viene
realizzato tramite opportune applicazioni già disponibili, e
che sono quindi evidentemente in linguaggio macchina
Traduzione ed esecuzione di programmi
17
Programmi in linguaggio macchina
q Un calcolatore è una macchina che ricevendo un
programma in linguaggio macchina e i relativi dati
in ingresso lo esegue producendo dati in uscita (i
risultati dell’elaborazione)
§ durante questa esecuzione la macchina (hardware)
diventa una macchina virtuale
programma
elaboratore
(hardware)
dati in uscita
(output)
dati in ingresso
(input)
Traduzione ed esecuzione di programmi
18
Compilazione e interpretazione
q Esistono due approcci alla traduzione ed esecuzione dei
programmi
§ compilazione
• un programma scritto in un linguaggio di programmazione di alto
livello viene trasformato in un programma in linguaggio macchina e
poi eseguito
§ interpretazione
• ciascuna istruzione del programma scritto in un linguaggio di
programmazione di alto livello viene trasformata in istruzioni del
linguaggio macchina ed eseguita
§ i traduttori del primo tipo sono chiamati effettivamente
compilatori, quelli del secondo tipo sono chiamati interpreti
q Una analogia con la traduzione tra linguaggi diversi
§ la compilazione è analoga alla traduzione di un libro
§ l’interpretazione è analoga alla traduzione simultanea
Traduzione ed esecuzione di programmi
19
Interpretazione
q Il calcolatore con un programma interprete,
ricevendo un programma sorgente in
linguaggio simbolico e i relativi dati in
ingresso lo interpreta e lo esegue, istruzione
dopo istruzione, producendo direttamente i
dati in uscita
programma
simbolico
elaboratore
(interprete)
dati in uscita
(output)
dati in ingresso
(input)
Traduzione ed esecuzione di programmi
20
Confronto tra compilazione ed interpretazione
q I linguaggi compilati
§ prevedono la distribuzione di un file eseguibile (in
linguaggio macchina) specifico per ogni piattaforma
§ il file sorgente, che consentirebbe di modificare il
programma, rimane di esclusiva pertinenza del
programmatore
q I linguaggi interpretati
§ prevedono la distribuzione diretta del file sorgente (che
è il medesimo per tutte le piattaforme)
§ su ogni piattaforma deve essere disponibile il
programma interprete
Traduzione ed esecuzione di programmi
21
Il linguaggio Java
q Java adotta una strategia mista
§ il file sorgente contenente un programma Java viene
prima compilato, generando un file in ByteCode
• il file in ByteCode è un file in linguaggio macchina per una
macchina non esistente, detta macchina virtuale o Java
Virtual Machine
§ per essere eseguito il ByteCode viene interpretato su
ogni piattaforma
§ esistono programmi interpreti, che realizzano una Java
Virtual Machine, per ogni piattaforma
§ in questo modo il file sorgente non viene distribuito,
mentre il file ByteCode distribuito è il medesimo per
tutte le piattaforme
Traduzione ed esecuzione di programmi
22
Compilazione di programmi Java
q Il calcolatore con un programma
Compilatore Java, ricevendo un
programma sorgente in linguaggio Java
esegue la traduzione producendo in uscita il
corrispondente programma in un
linguaggio intermedio ByteCode
programma
sorgente Java
elaboratore
(compilatore
java)
Traduzione ed esecuzione di programmi
programma
ByteCode
23
Interpretazione di programmi in ByteCode
q Il calcolatore con un programma interprete
Java Virtual Machine (JVM), ricevendo un
programma ByteCode e i relativi dati in
ingresso lo interpreta e lo esegue, istruzione
dopo istruzione, producendo direttamente i
dati in uscita
programma
ByteCode
elaboratore
(JVM)
dati in uscita
(output)
dati in ingresso
(input)
Traduzione ed esecuzione di programmi
24
Riassumendo
editing
codice
sorgente
/* Applicazione che visualizza una frase sullo schermo. */
class ScrittoreSulloSchermo {
public static void main(String[] args) {
System.out.println("Questo corso");
System.out.println("introduce i concetti di");
System.out.println("base dell'informatica");
}
}
compilazione
bytecode Java
...
getstatic #6 <Field java.io.PrintStream out>
...
interpretazione della JVM
Questo corso
introduce i concetti di
base dell’informatica
Traduzione ed esecuzione di programmi
25
Che cosa fare in pratica — esecuzione
q Per eseguire una applicazione si deve usare il comando
java di Java 2 SDK
§ per eseguire il comando java si deve specificare il nome della
classe applicazione che si vuole eseguire
§ una applicazione Java viene eseguita come segue
• viene inizializzata una macchina virtuale Java (JVM)
• la JVM costruisce l’oggetto classe corrispondente alla classe
applicazione
• la JVM invia il messaggio main(...) a questo oggetto classe
q Per eseguire l’applicazione ScrittoreSulloSchermo è
necessario eseguire il comando
§
java ScrittoreSulloSchermo
• si osservi come il nome del metodo main non compare esplicitamente
nel comando
Traduzione ed esecuzione di programmi
26
Uso di Java 2 SDK
q La seguente figura mostra la compilazione ed esecuzione
dell’applicazione ScrittoreSulloSchermo nella finestra del
prompt dei comandi di Windows
§ si osservi che System.out corrisponde alla finestra in cui viene
eseguita l’applicazione
Traduzione ed esecuzione di programmi
27
Ambienti integrati di sviluppo
q Un ambiente integrato di sviluppo (o IDE, che è
l’acronimo di Integrated Development Environment) è una
applicazione che permette di editare, compilare ed
eseguire programmi nell’ambito di un unico ambiente
q Alcune funzionalità tipiche di un IDE Java sono le seguenti
§ editor (integrato) guidato dalla sintassi
• sintassi evidenziata mediante colori
• aiuto in linea e sensibile al contesto
§ editor visuale di interfacce grafiche (GUI)
§ accesso al compilatore e alla macchina virtuale Java mediante
menu e/o bottoni
§ altri strumenti
• browser della documentazione
• debugger integrato
• gestore di progetti e classi
Traduzione ed esecuzione di programmi
28
Ambienti integrati di sviluppo per Java
q Ci sono due tipologie di IDE per Java
§ IDE dotati di una propria versione di Java SDK
• Borland JBuilder Foundation,
http://www.borland.com/jbuilder/foundation/
• Metrowerks CodeWarrior
• Microsoft Visual J++
• Symantec Visual Café
§ IDE che non sono dotati di una propria versione di Java SDK —
ma che ne richiedono una installazione separata
• Kawa (Allaire, Tek-Tools) —
http://www.allaire.com/products/kawa/
• Forte for Java, Community Edition (Sun) —
http://www.sun.com/forte/ffj/ce/
• TextPad (Helios Software Solutions) — http://www.textpad.com —
diversamente dai precedenti, TextPad è un editor di testi arricchito
con alcune funzionalità degli IDE
Traduzione ed esecuzione di programmi
29
Riepilogo della dispensa
q
q
q
q
q
q
Vengono mostrate le varie fasi dello sviluppo di un programma,
supponendo di avere gia’ a disposizione un algoritmo risolutivo
di un dato problema
L’algoritmo viene tradotto nel linguaggio di programmazione
scelto, scritto utilizzando un editor di testi.
Il programma viene poi compilato o interpretato, in dipendenza
dal linguaggio scelto
Il codice puo’ essere tradotto direttamente in codice eseguibile
oppure in byte code
Il byte code (come nel caso di Java) necessita di un ulteriore
strato software che traduce il byte code nel formato eseguibile
per la piattaforma su cui deve essere eseguito
Esempio di questo processo e’ la JVM che riceve un programma
in byte code (estensione .class)
http://www.dia.uniroma3.it/~java/fondinf/
La rappresentazione dell’informazione
30
Conoscenze acquisite
q Distinzione tra un linguaggio di lato livello e uno di
basso livello
q Distinzione tra un linguaggio compilato e uno
interpretato
q Distinzione delle varie fasi del processo di
realizzazione di un programma: dall’editor del testo
alla traduzione del programma in linguaggio macchina
q Ruolo della Java Virtual Machine
q Esistenza di diversi editor e di ambienti integrati di
sviluppo che permettono sia di editare che compilare I
programmi
http://www.dia.uniroma3.it/~java/fondinf/
La rappresentazione dell’informazione
31
Competenze acquisite
q Distinzione tra un linguaggio di lato livello e uno di
basso livello
q Distinzione tra un linguaggio compilato e uno
interpretato
q Distinzione delle varie fasi del processo di
realizzazione di un programma: dall’editor del testo
alla traduzione del programma in linguaggio macchina
q Ruolo della Java Virtual Machine
http://www.dia.uniroma3.it/~java/fondinf/
La rappresentazione dell’informazione
32
Rifermimenti al libro di testo
q Per lo studio di questi argomenti si fa riferimento
al libro di testo, e in particolare al capitolo 4
(Strumenti per la programmazione)
§ 4.1 Strumenti per la programmazione
•
•
•
•
•
•
4.1.1 Editing ed editor
4.1.2 Compilazione e compilatori
4.1.3 Esecuzione
4.1.4 Compilatori e interpreti
4.1.5 Compilazione ed esecuzione di programmi Java
4.1.6 Java 2 Software Development Kit
§ 4.2 Che cosa fare in pratica
§ 4.4 Ambienti integrati di sviluppo
Traduzione ed esecuzione di programmi
33
Parole chiave
q Linguaggio ad alto livello, Linguaggio a basso livello
Linguaggio macchina
q Programma sorgente, compilatore, programma
eseguibile
q Compilatori, interpreti
q Editor, ambienti integrati di sviluppo
q Java Vitrual Machine, byte code
http://www.dia.uniroma3.it/~java/fondinf/
La rappresentazione dell’informazione
34