FONDAMENTI E LINGUAGGI PER LA PROGRAMMAZIONE DISTRIBUITA

INF/01 - 6 CFU - 2° semestre

Docente titolare dell'insegnamento

FRANCO BARBANERA


Obiettivi formativi

Conoscenza e capacità di comprensione (knowledge and understanding): L'obiettivo del corso e' quello di far entrare in contatto lo studente con alcune teorie fondazionali per la programmazione concorrente e distribuita. Lo studente imparera' quindi a riconoscere quello che accomuna la gran parte dei linguaggi concorrenti e distribuiti, ed a isolarne gli aspetti che invece li caratterizzano.

Capacità di applicare conoscenza e comprensione (applying knowledge and understanding): Lo studio di molte delle teorie fondazionali di cui al punto precedente verra' accompagnato alla pratica di programmazione in linguaggi che su tali teorie si basano. Siano essi linguaggi per lo sviluppo a livello industriale, come Erlang per al modello ad attori per la concorrenza, sieno essi linguaggi didattici o sperimentali, come PICT per quanto riguarda la teoria del pi-calcolo o SePi per la Teoria dei Session Types.

Autonomia di giudizio (making judgements): Lo studente verra' stimolato a cercare di applicare autonomamente quanto imparato nel contesto fromale delle teorie fondazionali presentate ad esempi didattici, ma concreti di programmazione. Verra' inoltre stimolato a inquadrare le eventuali conoscenze acquisite in passato relative alla programmazione concorrente e distribuita nel contesto astratto delle teorie fondazionali affrontate nel corso.

Abilità comunicative (communication skills):

Capacità di apprendimento (learning skills): Lo studente sara' messo in condizione di poter affrontare autonomamente lo studio di linguaggi concorrenti e distribuiti, imparandone a riconoscere ed isolare gli aspetti fondamentali che li caratterizzano


Modalità di svolgimento dell'insegnamento

La prima parte della lezione (circa un terzo della durata complessiva della stessa) viene di solito in parte dedicato allo svolgimento di esercizi (tipicamente piccoli programmi, ma non solo). Il sito del corso contiene un insieme di esercizi, e gli studenti sono invitati ad affrontarli durante lo studio individuale. Quelli in cui gli studenti avessero riscontrato difficolta' vengono affrontati nella prima parte della lezione, su richiesta degli studenti. Sempre nella prima parte il docente invita gli studenti a comunicare eventuali difficolta' incontrate nell'affrontare lo studio degli argomenti delle lezioni precedenti, in modo di poterne cosi' discutere insieme. Gli studenti sono inoltre invitati a comunicare le difficolta' che incontrano nello studio individuale anche nel Forum di discussione del corso (http://forum.informatica.unict.it/index.php?PHPSESSID=m8niloev0emo2c22ok9klfekk2&board=152.0) in modo che queste possano venire superate in modo collaborativo insieme ai loro colleghi, con l'intervento del docente.

Nella seconda parte della lezione si affrontano nuovi argomenti e vengono spesso indicati esercizi relativi agli stessi, tra quelli presenti nella pagina degli esercizi del corso o nuovi (che eventualmente andranno ad incrementare l'insieme degli esercizi disponibili).

Qualora l'insegnamento venisse impartito in modalità mista o a distanza potranno essere introdotte le necessarie variazioni rispetto a quanto dichiarato in precedenza, al fine di rispettare il programma previsto e riportato nel syllabus.


Prerequisiti richiesti

Elementi di base di logica; elementi di base di programmazione concorrente.



Frequenza lezioni

Non obbligatoria, ma consigliata.



Contenuti del corso



Testi di riferimento

Testi di riferimento


Altro materiale didattico

Ulteriori testi di riferimento



Programmazione del corso

 ArgomentiRiferimenti testi
1Introduzione alla Progr. FunzionaleLink ai testi  
2Introduzione ad Haskell e tipi in Haskell. Introduzione al lambda-calcolo.Link ai testi  
3Lambda Calcolo: i termini, Variabili libere e legate, sostituzione. Teoria della beta-riduzione e risultati fondamentali. Cenni di teoria della beta-conversione.Link ai testi  
4Il modello di programmazione concorrente ad attori. Introduzione ad Erlang.Link ai testi  
5Programmazione in ErlangLink ai testi  
6Introduzione al pi-calcolo. Processi, scope-extrusion.Link ai testi  
7Semantica operazionale del pi-calcolo. Cenni di transizioni etichettate. Cenni di PICT e del suo sitema di tipi.Link ai testi  
8Pattern matching: definizione e implementazioneLink ai testi  
9Introduzione ai Session Types.Link ai testi  
10Introduzione a SePiLink ai testi  
11Programmazione SePi. Cenni di Equivalenza contestuale e bisimulation.Link ai testi  
12Il meccanismo della delegation nei session types. Esempi in SePi.Link ai testi  
13Refinement Types. Assume and Assert in SePiLink ai testi  
14Global protocols, local protocols, projections and comunicating finite state automata.Link ai testi  
15Multiparty session types: overview.Link ai testi  
16A pi-calculus with multiparty session typesLink ai testi  
17Distributed pi-calculi. Programmazione distribuita in Erlang: costrutti principali.Link ai testi  
18Introduzione alle logiche temporali: Linear and Branching time.Link ai testi  
19Introduzione al Model checking.Link ai testi  
20Reti di Petri: cenni ai concetti fondamentali.Link ai testi  


Verifica dell'apprendimento


MODALITÀ DI VERIFICA DELL'APPRENDIMENTO

Scritto e orale.

La verifica dell’apprendimento potrà essere effettuata anche per via telematica, qualora le condizioni lo dovessero richiedere.


ESEMPI DI DOMANDE E/O ESERCIZI FREQUENTI

Link alla pagina degli Esercizi




Apri in formato Pdf English version