Anno accademico 2022-2023

LINGUAGGI DI PROGRAMMAZIONE

Docenti

Pietro Di Gianantonio
Anno di corso
3
Totale crediti
9
Periodo didattico
Secondo Periodo
Tipologia
Caratterizzante
Prerequisiti. Le conoscenze acquisite nei corsi: Fondamenti dell’informatica, Programmazione e laboratorio, Programmazione orientata agli oggetti, Sistemi operativi.
Metodi didattici. Lezioni frontali, esercitazioni.
Modalità di verifica. L’esame si compone di una prova scritta e di una prova orale. L’esame scritto prevede lo svolgimento di una serie di esercizi e si propone di valutare la capacità di applicare le competenze acquisite. La prova orale, obbligatoria per tutti, consiste in una serie di domande sugli argomenti trattati a lezione e si propone di valutare quanto sia approfondita la conoscenza delle nozioni acquisite.
Obiettivi formativi
Scopo del corso è approfondire le conoscenze relative ai linguaggi di programmazione. Usando coma base le conoscenze già acquisite, negli anni passati, su diversi linguaggi di programmazione, vengono presentate nozioni e principi “universali” che guidano la definizione e l’implementazione dei moderni linguaggi di programmazione.

Acquisire una solida base di conoscenze generali permette di muoversi con una certa disinvoltura tra i vari linguaggi di programmazione e permette di apprendere in maniera rapida ed efficace nuovi linguaggi. La conoscenza degli aspetti implementativi permette di avere un stima del costo di esecuzione dei diversi costrutti di un linguaggio, e quindi fornisce le informazioni base per la scritture di codice efficiente.

Nel corso particolare risalto viene dato al paradigma di programmazione funzionale per le sue caratteristiche di pulizia ed espressività. Viene presentato il linguaggio funzionale Haskell e si mostra quindi come meccanismi quali high-order e non-determinismo possano essere sfruttate per scrivere codice compatto, elegante e flessibile (riutilizzabile).

Contenuti
Macchine astratte, interpretazione e compilazione. Introduzione alla struttura dei compilatori.

Descrivere un linguaggio di programmazione: sintassi, semantica, pragmatica.

Analisi lessicale. Analisi sintattica. Generatori di analizzatori, lessicali e sintattici: Lex, Alex, Yacc, Happy.

I nomi e l’ambiente.

La gestione della memoria.

Strutturare il controllo.

Astrarre sul controllo: procedure e funzioni.

Strutturare i dati: i tipi di dati nei linguaggi di programmazione.

Paradigma orientato agli oggetti

Paradigma funzionale.

Introduzione alla programmazione funzionale. Il linguaggio Haskell.

Sistemi di assegnazione di tipo, descrizione formale.

Programmazione concorrente.

Testi di riferimento
M. Gabbrielli e S. Martini. Linguaggi di Programmazione – Principi e Paradigmi. McGraw-Hill. ISBN 88-386-6261-4

[HPF] P. Hudak, J. Peterson, J. Fasel. A gentle introduction to Haskell’98. Disponibile in rete.

[Car] Cardelli (2004). “Type systems”. In Allen B. Tucker. CRC Handbook of Computer Science and Engineering(PDF) (2nd ed.). CRC Press. ISBN 158488360X.

[Al] Alex user guide. C. Dornan, I. Jones, S. Marlow Disponibile in rete.

[Ha] Happy user guide. S. Marlow, A. Gill Disponibile in rete.