Sei sulla pagina 1di 3

LINGUAGGI DI PROGRAMMAZIONE

Il calcolatore è: uno strumento programmabile per rappresentare, memorizzare ed elaborare


informazioni. Un sistema costituito da molte componenti. Studiare l’architettura di un sistema
significa: individuare ciascun componente del sistema; comprendere i principi generali di
funzionamento di ciascun componente e comprendere come le varie componenti interagiscono.
GERARCHIA DEL SOFTWARE
▸ Sei livelli di astrazione separano l’utente dall’hardware sottostante:
0 Circuiti digitali
1 Logica di controllo
2 Macchina hardware ▸ ISA – Instruction Set Architecture
3 Software di base ▸ Sistema operativo / ▸ librerie
4 Linguaggio assemblativo
5 Linguaggi di programmazione
6 Programmi applicativi.
▸rI linguaggi di programmazione sono classificati in genere in due categorie:i linguaggi di basso
livello e i linguaggi di alto livello. Nella prima categoria rientrano i linguaggi macchina e i linguaggi
di tipo assemblativo. I costrutti di questi linguaggi sono molto semplici,”di basso livello” appunto,di
conseguenza risulta complesso usarli per scrivere programmi,che fra l’altro saranno eseguibili solo
su dispositivi che condividono lo stesso linguaggio macchina. Dall’altra parte,un programma scritto
in linguaggio di basso livello è direttamente eseguibile dal processore,risulta perciò particolarmente
efficiente sia per i tempi di esecuzione brevi,sia per la ridotta occupazione di memoria.
LINGUAGGIO MACCHINA
Costituito dall’insieme delle istruzioni dei singoli processori,composte da successioni numeriche
che rappresentano i codici operativi del processore e i dati su cui essi operano.
▸ Formato binario. Le istruzioni sono indistinguibili dai dati su cui operano.
▸ Non consente l’uso di etichette o simboli per indicare locazioni di memoria o istruzioni adibite a
compiti specifici.
▸ Difficile da modificare.
▸ Difficile creare dati. I dati possono solo essere rappresentati nel loro formato interno.
I calcolatori della prima generazione potevano essere programmati soltanto in linguaggio
macchina! L’insieme delle istruzioni del linguaggio macchina di un processore firmano l’Instruction
Set Architecture (ISA).
LINGUAGGIO ASSEMBLATIVO
▸ Orientato sia alla macchina che all’utente
▸ Linguaggio di seconda generazione, contrapposto al linguaggio macchina o di prima generazione
▸ Le istruzioni sono indicate con etichette comprensibili che vengono tradotte nel codice binario
corrispondente da un software traduttore.
▸ Codici mnemonici: le istruzioni macchina sono sostituite da codici alfanumerici,detti mnemonici,in
quanto descrittivi dell’operazione che identificano.
( Es: ADD – addizione SUB – sottrazione LOAD, STORE – carica da memoria, memorizza in
memoria JUMP – salta ad istruzione successiva)
▸Rapporto 1:1 con il linguaggio macchina
▸ Ogni istruzione in linguaggio assemblatore è tradotta esattamente nella sua corrispondente in
linguaggio macchina
▸ Specifico per una particolare classe di microprocessori
LINGUAGGI AD ALTO LIVELLO
I linguaggi di programmazione di alto livello sono progettati con l’obiettivo di rendere più
efficiente,rapido e semplice,lo sviluppo delle applicazioni informatiche.
▸ Grazie alla gerarchia del software è possibile scrivere programmi in un linguaggio più vicino
all’utente del linguaggio macchina.
▸ L’utente è ancora un programmatore esperto, profondo conoscitore della macchina e del suo
funzionamento.
▸L’avvento del PC avvicina alla macchina nuovi utenti/ programmatori.
Spinta verso nuovi linguaggi di programmazione, migliori intermediari tra utente e macchina; nuovi
linguaggi favoriscono ulteriormente la formazione di nuovi
LINGUAGGI D’ ALTO LIVELLO VS LINGUAGGIO ASSEMBLATIVO
▸Linguaggio assemblativo: gestione manuale dei movimenti dei dati tra la memoria e il
processore; visione microscopica dell’algoritmo; il linguaggio assemblativo è specifico della
macchina; le istruzioni sono molto distanti dal linguaggio naturale.
▸Linguaggi ad alto livello: gestione automatica del movimento dei dati; visione macroscopica
dell’algoritmo; uso di operazioni primitive più potenti, che possono essere combinate per
costruirne altre; portabilità dei programmi da una macchina ad un’altra ;le istruzioni sono vicine al
linguaggio naturale e usano la notazione matematica standard.
La distinzione tra linguaggi di programmazione di basso e di alto livello può essere elaborata
ancora in riferimento all’evoluzione storica dei linguaggi stessi:i linguaggi macchina appartengono
alla prima generazione,i linguaggi assemblativi alla seconda e i linguaggi di alto livello hanno
caratterizzato la terza generazione. Vari linguaggi di alto livello,considerati di quarta
generazione,sono stati progettati per specifici ambiti applicativi. Sono infine considerati di quinta
generazione i linguaggi che consentono di descrivere il problema da risolvere,e lasciano al
calcolatore l’onere di formulare il procedimento di risoluzione appropriato per il problema descritto.
▸ Il programma scritto in linguaggio di alto livello (codice sorgente) deve essere tradotto in
linguaggio macchina da un apposito software detto traduttore. Le istruzioni vengono dunque
trasformate in istruzioni scritte in linguaggio macchina per poter essere eseguite.
TRADUTTORI
▸ Compilatori
effettuano la traduzione del programma dal linguaggio di programmazione sorgente al codice
macchina, generando un programma eseguibile che permane, dopo la traduzione, come file a se
stante. Programmi più efficienti. Necessitano una nuova traduzione in caso di errori run-time.
▸ Interpreti
effettuano la traduzione istruzione per istruzione del programma sorgente, generando il codice
macchina passo passo, senza creare un programma eseguibile statico. Programmi meno efficienti.
Correzione interattiva degli errori.
COMPILAZIONE:
Compilatore ▸ trasforma il programma sorgente in codice oggetto,4 fasi di lavoro:
-Analisi delle stringhe di testo (token)
- Analisi della correttezza sintattica delle
frasi
- Analisi della correttezza “semantica” cioè
della coerenza rispetto alle altre frasi
- Generazione del codice binario.
Include e/o richiama l’assemblatore.
Assemblatore▸ trasforma direttamente il codice assemblativo in linguaggio macchina.
▸ Linker: collega al codice oggetto del programma altri frammenti di codice oggetto (librerie).
▸ Le librerie sono i codici di accesso alle funzioni del Sistema Operativo.
▸ Loader: non è un passo di traduzione; carica il file eseguibile in memoria centrale per
l’esecuzione; rilocazione del codice; gestione della memoria.
INTERPRETAZIONE:
▸ Le quattro fasi vengono realizzate istruzione per istruzione.
▸ Non c’è il loader perché ogni istruzione tradotta è eseguita direttamente.
▸ Le librerie utilizzate sono le cosiddette run-time. Pronte per essere eseguite
direttamente, e non da collegare ad altri codici oggetto.
▸ Linguaggi di prima generazione: Linguaggio macchina
▸ Linguaggi di seconda generazione: Linguaggi assemblativi
▸ Linguaggi di terza generazione (di alto livello)
Esistono diversi paradigmi di programmazione nell’ambito dei quali i vari linguaggi trovano
collocazione. ▸ paradigma imperativo-procedurale
(linguaggi quali: FORTRAN, Cobol, Pascal, C, Ada)
▸ paradigma orientato agli oggetti
(C++, Java)
▸ paradigma funzionale (LISP)
▸paradigma dichiarativo.
▸ Altri paradigmi di programmazione
▸ Linguaggi per applicazioni specifiche
(SQL – Structured Query Language, Perl – Practical Extraction and Report Language, HTML –
Hypertext Markup Language)
▸ Programmazione parallela
▸ Programmazione logica (PROLOG)