Linguaggi di programmazione - Dipartimento di Matematica e ... · Introduzione al corso Linguaggi...

39
Linguaggi di programmazione Introduzione al corso Introduzione al corso Linguaggi di programmazione 1 / 39

Transcript of Linguaggi di programmazione - Dipartimento di Matematica e ... · Introduzione al corso Linguaggi...

Page 1: Linguaggi di programmazione - Dipartimento di Matematica e ... · Introduzione al corso Linguaggi di programmazione 4 / 39. ... a lezione farò qualche riferimento in più. Introduzione

Linguaggi di programmazione

Introduzione al corso

Introduzione al corso Linguaggi di programmazione 1 / 39

Page 2: Linguaggi di programmazione - Dipartimento di Matematica e ... · Introduzione al corso Linguaggi di programmazione 4 / 39. ... a lezione farò qualche riferimento in più. Introduzione

Argomento del corso: una trattazione generale deilinguaggi di programmazione

Completare le conoscenze acquisite finora:

assembly ARMSchemeJavaC

Una minuscola parte dei linguaggi disponibili,

difficile impararli tutti;ma esistono: costrutti, meccanismi generali comuni ai vari linguaggidi programmazione;argomenti di questo corsoaiutano la comprensione generale dei linguaggi diprogrammazione.

Introduzione al corso Linguaggi di programmazione 2 / 39

Page 3: Linguaggi di programmazione - Dipartimento di Matematica e ... · Introduzione al corso Linguaggi di programmazione 4 / 39. ... a lezione farò qualche riferimento in più. Introduzione

Obiettivi

Fornire un quadro generale dei linguaggi di programmazionePresentazione generali di:

caratteristiche dei linguaggi programmazione (varie classi dilinguaggi di programmazione),meccanismi funzionamento(es. identificatori – ambiente, gestione della memoria, meccanismocontrollo del flusso . . . )tecniche di implementazione: compilatori, interpreti, . . .

Mettere in risalto:

gli aspetti comuni dei linguaggi,punti critici della loro comprensione.

Introduzione al corso Linguaggi di programmazione 3 / 39

Page 4: Linguaggi di programmazione - Dipartimento di Matematica e ... · Introduzione al corso Linguaggi di programmazione 4 / 39. ... a lezione farò qualche riferimento in più. Introduzione

Alcuni obiettivi pratici

Rendere più facile l’apprendimento di nuove linguaggi:

alcuni linguaggi sono simili tra loro, posono essere catalogatisecondo un albero genealogicoi concetti base sono ancora più simili, sono comuni a moltilinguaggi:

meccanismi di controllo del flusso: iterazione, ricorsione, astrazionesistema di tipo,. . .

conoscere questi elementi comuni rendono più semplice impararenuovi linguaggi

Introduzione al corso Linguaggi di programmazione 4 / 39

Page 5: Linguaggi di programmazione - Dipartimento di Matematica e ... · Introduzione al corso Linguaggi di programmazione 4 / 39. ... a lezione farò qualche riferimento in più. Introduzione

Alcuni obiettivi pratici

Fare un uso migliore dei linguaggi:

capire alcuni meccanismi complessi: passaggi dei parametri, usodella memoriausare i linguaggi nella loro completezza,un linguaggio evolvendo introduce nuove featurespesso chi programma ne utilizza un minima partecomprendere i costi di implementazione: scegliere tra modialternativi di fare la stessa cosa: ricorsione di coda

Introduzione al corso Linguaggi di programmazione 5 / 39

Page 6: Linguaggi di programmazione - Dipartimento di Matematica e ... · Introduzione al corso Linguaggi di programmazione 4 / 39. ... a lezione farò qualche riferimento in più. Introduzione

Alcuni obiettivi pratici

Capire come implementare features che non supportate esplicitamente:

mancanza di strutture di controllo adeguate, ricorsione in Fortran,riscrivere un algoritmo ricorsivo in uno iterativo, eliminazionemeccanica della ricorsione

Introduzione al corso Linguaggi di programmazione 6 / 39

Page 7: Linguaggi di programmazione - Dipartimento di Matematica e ... · Introduzione al corso Linguaggi di programmazione 4 / 39. ... a lezione farò qualche riferimento in più. Introduzione

Libri di testo

M. Gabbrielli, S. Martini. Linguaggi di programmazione - Principi eparadigmi. McGraw-Hillarticoli e manuali reperibili nella pagina web del corso.

Corso e contenuti in gran parte standard.Diversi libri di testo con contenuti e ordine di presentazionesovrapponibili

Michael Scott. Programming language pragmatics Elsevier, MKMorgan Kaufmann.Sebasta. Concept in progamming language Pearson

Introduzione al corso Linguaggi di programmazione 7 / 39

Page 8: Linguaggi di programmazione - Dipartimento di Matematica e ... · Introduzione al corso Linguaggi di programmazione 4 / 39. ... a lezione farò qualche riferimento in più. Introduzione

Pro e contro

Gabbrielli-Martini,

semplice, chiaro, senza banalizzare, pregio principale,specie in confronto ad altri libri di testo,astratto: vengono spesso date le definizioni formali dei diversiconcetti;mancano:

argomenti più complessi;

pochi riferimenti ai linguaggi di programmazione più usati,

si preferisce usare un pseudo linguaggio,esempi reperibili negli altri libri di testo,a lezione farò qualche riferimento in più.

Introduzione al corso Linguaggi di programmazione 8 / 39

Page 9: Linguaggi di programmazione - Dipartimento di Matematica e ... · Introduzione al corso Linguaggi di programmazione 4 / 39. ... a lezione farò qualche riferimento in più. Introduzione

Pagina web del corso

www.dimi.uniud.it/pietro/linguaggiraggiungibile dalla mia home page,copia della pagina disponibile anche su elearning,stabile e abbastanza completa,probabilmente verrà aggiornata, completata nel corso dell’anno.

Introduzione al corso Linguaggi di programmazione 9 / 39

Page 10: Linguaggi di programmazione - Dipartimento di Matematica e ... · Introduzione al corso Linguaggi di programmazione 4 / 39. ... a lezione farò qualche riferimento in più. Introduzione

Organizzazione

periodo didattico: secondoorario, forse modificabile,sovrapposizioni con altri corsiorario di ricevimento?? mercoledì: 11:30 – 13:00.

Introduzione al corso Linguaggi di programmazione 10 / 39

Page 11: Linguaggi di programmazione - Dipartimento di Matematica e ... · Introduzione al corso Linguaggi di programmazione 4 / 39. ... a lezione farò qualche riferimento in più. Introduzione

Esame

Tradizionale:

scritto

domande di teoria,esercizi,

esercizi da svolgere a casa e discutere durante l’esame orale,orale obbligatorio per tutti.

Introduzione al corso Linguaggi di programmazione 11 / 39

Page 12: Linguaggi di programmazione - Dipartimento di Matematica e ... · Introduzione al corso Linguaggi di programmazione 4 / 39. ... a lezione farò qualche riferimento in più. Introduzione

Perché tanti linguaggi di programmazione?

Più paradigmi di programmazione:Imperativo:

von Neumann(Fortran, Pascal, Basic, C)orientato agli oggetti (Smalltalk, Eiffel, C ++?)linguaggi di scripting (Perl, Python, JavaScript, PHP)

Dichiarativo:

funzionale (Scheme, ML, pure Lisp, FP)logico, basato su vincoli (Prolog, VisiCalc, RPG)

Introduzione al corso Linguaggi di programmazione 12 / 39

Page 13: Linguaggi di programmazione - Dipartimento di Matematica e ... · Introduzione al corso Linguaggi di programmazione 4 / 39. ... a lezione farò qualche riferimento in più. Introduzione

Perché tanti linguaggi di programmazione?

evoluzione: nel tempo si definiscono nuove costrutti, tecniche,principi di programmazione,fattori economici: interessi proprietari, vantaggio commercialediverse priorità: codice efficiente, pulizia del codice, flessibilitàdiversi usi:calcolo scientifico (Fortan),analisi dei dati (R),sistemi embedded (C),applicazioni web (JavaScript, PHP),. . .

Introduzione al corso Linguaggi di programmazione 13 / 39

Page 14: Linguaggi di programmazione - Dipartimento di Matematica e ... · Introduzione al corso Linguaggi di programmazione 4 / 39. ... a lezione farò qualche riferimento in più. Introduzione

Cosa rende un linguaggio di successo?

buon supporto: librerie, codice preesistente, IDE (tutti i linguaggipiù diffusi)supporto da uno sponsor importante(C#, Visual Basic, Objetive C, Switft, Go)ampia diffusione a costi minimi, portabilità(JavaScript, Java, Pascal)espressivo, flessibile, potente(C, Lisp, APL, Perl)possibilità di ottenere codice veloce / compatto(Fortran, C)facile da implementare(BASIC, Forth)

Introduzione al corso Linguaggi di programmazione 14 / 39

Page 15: Linguaggi di programmazione - Dipartimento di Matematica e ... · Introduzione al corso Linguaggi di programmazione 4 / 39. ... a lezione farò qualche riferimento in più. Introduzione

Qualità di un linguaggio:

Leggibilitàchiarezza, naturalità, semplicità:supporto all’astrazione:è facile modificare del codice.

Scrivibilitàè facile passare dagli algoritmi al codice,

semplice da imparare:(BASIC, Pascal, Scheme)polimorfismo: stesso codice su dati diversi;ortogonalità:diverse caratteristiche si integrano in modo naturale tra loro, pocheeccezione(es. tipi dato e passaggio parametri a procedure)

Affidabilitàfacilità di verifica,

Costoefficienza

Introduzione al corso Linguaggi di programmazione 15 / 39

Page 16: Linguaggi di programmazione - Dipartimento di Matematica e ... · Introduzione al corso Linguaggi di programmazione 4 / 39. ... a lezione farò qualche riferimento in più. Introduzione

Aspetti di un linguaggio di programmazione

sintassi: quali sequenze di caratteri costituiscono programmi, laloro struttura,semantica: come si comporta un programma, l’effetto della loroesecuzione,pragmatica: utilizzo pratico; come scrivere buon codice;convenzioni, stili nello scrivere i programmi,implementazione: come il codice viene convertito in istruzionimacchina, eseguito,librerie: codice fornito con il linguaggio per implementarefunzionalità base,tools: per editing, debugging, gestione del codice.

Nel corso consideriamo principalmente i primi 4 aspetti, gli ultimi dueimportanti ma molto variabili.

Introduzione al corso Linguaggi di programmazione 16 / 39

Page 17: Linguaggi di programmazione - Dipartimento di Matematica e ... · Introduzione al corso Linguaggi di programmazione 4 / 39. ... a lezione farò qualche riferimento in più. Introduzione

Macchina astratta.

Sistema di calcolo diviso in un gerarchia di macchine virtuali(astratte) Mi .Ciascuna costruita sulla precedente, a partire dal livello hardware.Ciascuna caratterizzata da un linguaggio, Li , con cui scriverecodice.

Introduzione al corso Linguaggi di programmazione 17 / 39

Page 18: Linguaggi di programmazione - Dipartimento di Matematica e ... · Introduzione al corso Linguaggi di programmazione 4 / 39. ... a lezione farò qualche riferimento in più. Introduzione

Esecuzioni del codice

Come eseguire un programma, per esempio, scritto in LJava,quindi relativo alla macchina astratta MJava (macchina Java)

si sfrutta uno dei livelli di macchina sottostanti,per esempio una MJVM (Java Virtual Machine)che qualcuno ha già implementato,si esegue una traduzione nel linguaggio relativo LJVM (JavaByteCode)

Introduzione al corso Linguaggi di programmazione 18 / 39

Page 19: Linguaggi di programmazione - Dipartimento di Matematica e ... · Introduzione al corso Linguaggi di programmazione 4 / 39. ... a lezione farò qualche riferimento in più. Introduzione

Compilazione vs. Interpretazione

Compilazione pura:

Il compilatore traduce il programma sorgente di alto livello in unprogramma di destinazione equivalente(tipicamente in linguaggio macchina),Programma sorgente e compilatore non necessari durantel’esecuzione del codice.

Introduzione al corso Linguaggi di programmazione 19 / 39

Page 20: Linguaggi di programmazione - Dipartimento di Matematica e ... · Introduzione al corso Linguaggi di programmazione 4 / 39. ... a lezione farò qualche riferimento in più. Introduzione

Interpretazione pura

L’interprete riceve programma sorgente e dati, e traduce, passopasso, le singole istruzione che vengono eseguite immediatamente.L’interprete, programma sorgente, sono presenti durantel’esecuzione del programma.L’interprete è il luogo del controllo durante l’esecuzione.

Introduzione al corso Linguaggi di programmazione 20 / 39

Page 21: Linguaggi di programmazione - Dipartimento di Matematica e ... · Introduzione al corso Linguaggi di programmazione 4 / 39. ... a lezione farò qualche riferimento in più. Introduzione

Compilazione vs. Interpretazione

Compilazione

Migliori prestazioni: si evitano traduzioni e controlli a tempo diesecuzionesono possibili controlli prima dell’esecuzione (type-checking statico)

Interpretazione:

maggiore flessibilità (Scheme),più semplice da implementare,esecuzione diretta del codice,più semplice il debugging.

Introduzione al corso Linguaggi di programmazione 21 / 39

Page 22: Linguaggi di programmazione - Dipartimento di Matematica e ... · Introduzione al corso Linguaggi di programmazione 4 / 39. ... a lezione farò qualche riferimento in più. Introduzione

Compilazione vs. Interpretazione

Nei casi reali, traduzione in codice macchina, avviene con più passi ditraduzione,

la maggior parte delle implementazioni prevedono unacombinazione tra compilazione e interpretazionelinguaggi interpretati

pre-processing seguita dall’interpretazione

linguaggi compilatigenerazione codice intermedioesempi: Pascal P-code, Java bytecode, Microsoft COM +

Introduzione al corso Linguaggi di programmazione 22 / 39

Page 23: Linguaggi di programmazione - Dipartimento di Matematica e ... · Introduzione al corso Linguaggi di programmazione 4 / 39. ... a lezione farò qualche riferimento in più. Introduzione

Preprocessing vs. Compilazione

schema precedente può descrivere un pre-processing (sempliceelaborazione dell’input)in questo caso caso parliamo di linguaggi interpretati,compilazione traduzione da una lingua all’altra,

prevede un’analisi complessiva del dell’input

compilazione implica una comprensione semantica di ciò che vieneelaborato;il preprocessing noun pre-processore non garantisce assenza di errori nel tradotto

Introduzione al corso Linguaggi di programmazione 23 / 39

Page 24: Linguaggi di programmazione - Dipartimento di Matematica e ... · Introduzione al corso Linguaggi di programmazione 4 / 39. ... a lezione farò qualche riferimento in più. Introduzione

Supporto a run-time:

raramente compilatore produce solo codice macchina, anche“istruzioni virtuali”

chiamate al sistema operativochiamate a funzioni di libreriaes. funzioni matematiche (sin, cos, log, ecc.), input-output

traduzione a livello di sistema operativoo a livello di libreriaun programma linker unisce codice library subroutine

Introduzione al corso Linguaggi di programmazione 24 / 39

Page 25: Linguaggi di programmazione - Dipartimento di Matematica e ... · Introduzione al corso Linguaggi di programmazione 4 / 39. ... a lezione farò qualche riferimento in più. Introduzione

Assemblaggio post-compilazione

Il compilatore produce assembly (non codice macchina)

facilita il debugging (assembly più leggibile)isola il compilatore da modifiche nel formato delle istruzioni(solo l’assemblatore, condiviso tra molti compilatori, deve esseremodificato)

Introduzione al corso Linguaggi di programmazione 25 / 39

Page 26: Linguaggi di programmazione - Dipartimento di Matematica e ... · Introduzione al corso Linguaggi di programmazione 4 / 39. ... a lezione farò qualche riferimento in più. Introduzione

Traduzioni da linguaggio a linguaggio (C++)

prime implementazioni C++ generano un programma intermedio inC:

Introduzione al corso Linguaggi di programmazione 26 / 39

Page 27: Linguaggi di programmazione - Dipartimento di Matematica e ... · Introduzione al corso Linguaggi di programmazione 4 / 39. ... a lezione farò qualche riferimento in più. Introduzione

Bootstrap:

sollevarsi tirando i lacci dei propri stivali (Barone Munchausen)Implementare il compilatore

scrivo un nuovo compilatore per C, come programma in C.circolo vizioso evitato usando versioni differenti

Introduzione al corso Linguaggi di programmazione 27 / 39

Page 28: Linguaggi di programmazione - Dipartimento di Matematica e ... · Introduzione al corso Linguaggi di programmazione 4 / 39. ... a lezione farò qualche riferimento in più. Introduzione

Pascal e P-code

Meccanismo per semplificare la creazioni di compilatori, semplifica ladiffusione di un linguaggio.P-code: codice intermedio,Pascal fornisce:

Compilatore Pascal, scritto in Pascal: CPascal→PCodePascal ,

Compilatore Pascal, scritto in P-Code: CPascal→PCodePCode

(traduzione del predente)Interprete PCode, scritto in Pascal: IPCode

Pascal

A mano costruisco:

Interprete PCode, scritto nel mio linguaggio macchina: IPCodeLM

Introduzione al corso Linguaggi di programmazione 28 / 39

Page 29: Linguaggi di programmazione - Dipartimento di Matematica e ... · Introduzione al corso Linguaggi di programmazione 4 / 39. ... a lezione farò qualche riferimento in più. Introduzione

Interprete Pascal

Preso un programma Pascal PrPa posso:

ottenere la sua traduzione in PCode:

PrPC = IPCodeLM (CPascal→PCode

PCode , PrPa)

eseguire la traduzione:

IPCodeLM (PrPC, Dati)

Introduzione al corso Linguaggi di programmazione 29 / 39

Page 30: Linguaggi di programmazione - Dipartimento di Matematica e ... · Introduzione al corso Linguaggi di programmazione 4 / 39. ... a lezione farò qualche riferimento in più. Introduzione

Compilatore Pascal

Se, a mano, trasformo il CPascal→PCodePascal in CPascal→LM

Pascal , posso:

CPascal→LMPCode = IPCode

LM (CPascal→PCodePCode , CPascal→LM

Pascal ).CPascal→LM

LM = IPCodeLM (CPascal→LM

PCode , CPascal→LMPascal )

e ottengo un compilatore da Pascal in linguaggio macchina, scritto inlinguaggio macchina.

Introduzione al corso Linguaggi di programmazione 30 / 39

Page 31: Linguaggi di programmazione - Dipartimento di Matematica e ... · Introduzione al corso Linguaggi di programmazione 4 / 39. ... a lezione farò qualche riferimento in più. Introduzione

Compilatore Pascal

Introduzione al corso Linguaggi di programmazione 31 / 39

Page 32: Linguaggi di programmazione - Dipartimento di Matematica e ... · Introduzione al corso Linguaggi di programmazione 4 / 39. ... a lezione farò qualche riferimento in più. Introduzione

Compilazione dinamica, just-in-time

si ritarda la compilazione fino all’ultimo momento.implementazioni efficienti di Java (JVM)analogamente compilatore C# produce .NET CommonIntermediate Language (CIL), tradotto in codice macchinaimmediatamente prima dell’esecuzione.Lisp o Prolog invocano il compilatori just-in-time, per tradurre ilnuovo sorgente creato in linguaggio macchina o per ottimizzare ilcodice per un particolare set di input.

Introduzione al corso Linguaggi di programmazione 32 / 39

Page 33: Linguaggi di programmazione - Dipartimento di Matematica e ... · Introduzione al corso Linguaggi di programmazione 4 / 39. ... a lezione farò qualche riferimento in più. Introduzione

Una panoramica della compilazione

Compilazione divisa in più fasi.

Introduzione al corso Linguaggi di programmazione 33 / 39

Page 34: Linguaggi di programmazione - Dipartimento di Matematica e ... · Introduzione al corso Linguaggi di programmazione 4 / 39. ... a lezione farò qualche riferimento in più. Introduzione

Analisi lessicale - Scansione:

divide il programma in “token”, le unità più piccole e significativescanner: lavoro è semplice,semplifica le fasi successivepossibile progettare un parser che esamina caratteri anziché tokencome input, ma inefficientela scansione è il riconoscimento di una linguaggio regolare,riconosciuto tramite DFA

Introduzione al corso Linguaggi di programmazione 34 / 39

Page 35: Linguaggi di programmazione - Dipartimento di Matematica e ... · Introduzione al corso Linguaggi di programmazione 4 / 39. ... a lezione farò qualche riferimento in più. Introduzione

Analisi sintattica - Parsing

si analizza l’intero programma, definendo la sua strutturaprogrammi definiti a linguaggi liberi dal contesto,riconosciuti tramite PDAalternativamente grammatica definita da diagrammi sintattici (vedi“cerchi e le frecce” in manuale Pascal)

Introduzione al corso Linguaggi di programmazione 35 / 39

Page 36: Linguaggi di programmazione - Dipartimento di Matematica e ... · Introduzione al corso Linguaggi di programmazione 4 / 39. ... a lezione farò qualche riferimento in più. Introduzione

L’analisi semantica

costruisce l’albero della sintassi astrattaesegue controlli sul codice statici (es type checking) nonimplementabili dal parser (contex free grammar)altri controlli (ad esempio, indice di matrice fuori limite) eseguibilisola a tempo di esecuzione (dinamici)

Introduzione al corso Linguaggi di programmazione 36 / 39

Page 37: Linguaggi di programmazione - Dipartimento di Matematica e ... · Introduzione al corso Linguaggi di programmazione 4 / 39. ... a lezione farò qualche riferimento in più. Introduzione

Modulo intermedio

Si produce codice intermedio

codice intermedio: indipendente dal processore, facilità diottimizzazione o compattezza (richieste contrastanti)codice intermedio assomiglia spesso a codice macchina perqualche macchina astratta;

per esempio. una macchina stack o una macchina con molti registri

Introduzione al corso Linguaggi di programmazione 37 / 39

Page 38: Linguaggi di programmazione - Dipartimento di Matematica e ... · Introduzione al corso Linguaggi di programmazione 4 / 39. ... a lezione farò qualche riferimento in più. Introduzione

L’ottimizzazione

prende un programma a codice intermedio e ne produce un altro che fala stessa cosa (?) più velocemente o con meno memoria

il termine è improprio; si migliora il codice:fase facoltativa

La fase di generazione del codice produce linguaggio assembly olinguaggio macchina rilocabile (a volte)Alcune ottimizzazioni specifiche della macchina (uso di istruzionispeciali o modalità di indirizzamento, ecc.) Possono essere eseguitedurante o dopo la generazione del codice target

Introduzione al corso Linguaggi di programmazione 38 / 39

Page 39: Linguaggi di programmazione - Dipartimento di Matematica e ... · Introduzione al corso Linguaggi di programmazione 4 / 39. ... a lezione farò qualche riferimento in più. Introduzione

Tabella dei simboli

tutte le fasi si basano su una tabella dei simboli

tiene traccia di tutti gli identificatori nel programma e di ciò che ilcompilatore sa di loropuò essere mantenuta (in qualche modo) per essere utilizzata daun debugger,anche dopo che la compilazione è stata completata

Introduzione al corso Linguaggi di programmazione 39 / 39