FUNCTIONAL AND CONCURRENT PROGRAMMING PRINCIPLES

Anno accademico 2023/2024 - Docente: Franco BARBANERA

Risultati di apprendimento attesi

Conoscenza e capacità di comprensione (knowledge and understanding): L'obiettivo del corso e' quello di far entrare in contatto lo studente con alcuni aspetti fondamentali  la programmazione funzionale e concorrente sia dal punto di vista teorico che applicativo. Particolare attenzione verra' data, sia che per la programmazione funzionale che per qualla concorrenta, alla teoria dei tipi, intesa come utile strumento per la verifica parziale di correttezza dei programmi.

Capacità di applicare conoscenza e comprensione (applying knowledge and understanding): Lo studioteorico di cui al punto precedente verra' accompagnato alla pratica di programmazione in linguaggi che su tali teorie si basano. Siano essi linguaggi puramente funzionali, come Haskell, oppure linguaggi per la concorrenza per lo sviluppo a livello industriale, come Erlang per al modello ad attori per la concorrenza, oppure linguaggi didattici/sperimentali, come SePi basati sul Pi-calcolo e 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 nel contesto formale del corso le eventuali conoscenze  acquisite in passato relativamente alla programmazione funzionale e concorrente.

Abilità comunicative (communication skills):

Capacità di apprendimento (learning skills): Lo studente sara' messo in condizione di poter affrontare autonomamente lo studio di linguaggi funzionali e concorrenti, 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.

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

Nozioni base presenti nel corso di Fondamenti di Informatica della laurea di I livello..
 

Frequenza lezioni

Non obbligatoria, ma consigliata.

Contenuti del corso

  • Introduction to Functional Programming and main functional-programming concepts.
  • Programming in Haskell.
  • Theory of simple types and its application in Haskell.
  • Introduction to oncurrent  programming.
  • The actors model of concurrent programming.
  •  Concurrent programming in non-imperative programming paradigms: Erlang.
  • Concurrent Programming in Erlang
  • Process calculi: Introduction to the Pi-calculus;.
  • The Theory of Session Types.
  • Sperimental concurrent languages based on Pi-calcuus and session types: the language SePi
  •  Introduction to Choreographies and Multiparty Session Types.

Testi di riferimento

Programmazione del corso

 ArgomentiRiferimenti testi
1Introduzione alla Progr. Funzionalehttps://www.dmi.unict.it/barba/PRINC-FUN-CONC/PROGRAMMI-TESTI/index.html
2Introduzione ad Haskell e tipi in Haskell.Overview del lambda-calcolo.https://www.dmi.unict.it/barba/PRINC-FUN-CONC/PROGRAMMI-TESTI/index.html
3Teoria dei tipi semplici ed applicazioni ad Haskellhttps://www.dmi.unict.it/barba/PRINC-FUN-CONC/PROGRAMMI-TESTI/index.html
4Programmazione in Haskellhttps://www.dmi.unict.it/barba/PRINC-FUN-CONC/PROGRAMMI-TESTI/index.html
5Il modello di programmazione concorrente ad attori. https://www.dmi.unict.it/barba/PRINC-FUN-CONC/PROGRAMMI-TESTI/index.html
6Programmazione in Erlanghttps://www.dmi.unict.it/barba/PRINC-FUN-CONC/PROGRAMMI-TESTI/index.html
7Introduzione al pi-calcolo. https://www.dmi.unict.it/barba/PRINC-FUN-CONC/PROGRAMMI-TESTI/index.html
8Introduzione ai Session Types.https://www.dmi.unict.it/barba/PRINC-FUN-CONC/PROGRAMMI-TESTI/index.html
9Introduzione a SePihttps://www.dmi.unict.it/barba/PRINC-FUN-CONC/PROGRAMMI-TESTI/index.html
10Programmazione in SePi. https://www.dmi.unict.it/barba/PRINC-FUN-CONC/PROGRAMMI-TESTI/index.html
11Il meccanismo della delegation nei session types. Esempi in SePi.https://www.dmi.unict.it/barba/PRINC-FUN-CONC/PROGRAMMI-TESTI/index.html
12Coreographies: Gglobal protocols, local protocols.https://www.dmi.unict.it/barba/PRINC-FUN-CONC/PROGRAMMI-TESTI/index.html
13Multiparty session types.https://www.dmi.unict.it/barba/PRINC-FUN-CONC/PROGRAMMI-TESTI/index.html

Verifica dell'apprendimento

Modalità di verifica dell'apprendimento

Nella prova scritta verranno proposti quesiti relativi alla parte teorica del corso; verra' altresi' richiesto di sviluppare piccoli programmi nei linguaggi di programmazione affrontati nel corso.

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

Esempi di domande e/o esercizi frequenti