ADVANCED PROGRAMMING LANGUAGES
- Anno accademico
- 2026/2027 Programmi anni precedenti
- Titolo corso in inglese
- ADVANCED PROGRAMMING LANGUAGES
- Codice insegnamento
- CM0632 (AF:733839 AR:436303)
- Lingua di insegnamento
- Inglese
- Modalità
- In presenza
- Crediti formativi universitari
- 6
- Livello laurea
- Laurea magistrale (DM270)
- Settore scientifico disciplinare
- INFO-01/A
- Periodo
- I Semestre
- Anno corso
- 1
- Sede
- VENEZIA
Inquadramento dell'insegnamento nel percorso del corso di studio
- di comprendere gli strumenti matematici di supporto all'informatica
- di utilizzare tali strumenti per affinare la sua capacità affrontare problemi scientificamente rilevanti e di sviluppare applicazioni complesse.
Risultati di apprendimento attesi
- acquisire conoscenze specialistiche delle tecniche di progetto dei linguaggi di programmazione più avanzati
- acquisire conoscenze specialistiche degli strumenti di verifica del software
- acquisire capacità di applicare tali conoscenze per valutare l'efficacia di tali tecniche e tali strumenti nello sviluppo di sistemi software complessi
Prerequisiti
Contenuti
- Principi e meccanismi di base dei linguaggi di programmazione:
- Programmazione Funzionale
Typing foundations dei linguaggi di programmazione
- Applied Lambda Calculus. Sintassi e semantica operazionale.
- Typing: types, type systems, type safety
Strict vs Non-strict evaluation
- Strategie di valutazione: fondamenti e conseguenze per l'implementazione
Progetto di di datatypes nei linguaggi funzionali e object oriented
- Algebraic data types
- Funzioni di ordine superiore e polimorfe
- Tecniche di encapsulation
Subtyping e subtype polymorphism
- Il principio di sostituzione e la relazione di sottotipo.
- Typing e Subtyping: nominale vs strutturale
Type parametrization
- Generics, varianza e type bounds
Ad hoc polymorphism
- Da overloading a polimorfismo parametrico (bounded)
- Qualified types e type classes
Gestione degli errori:
- eccezioni: punti di forza, debolezza e alternative.
Testi di riferimento
Artima Press. 2021.
[TAPL] Types and Programming Languages. B.C. Pierce. The MIT Press. 2002.
Note delle lezioni e delle esercitazioni.
Modalità di verifica dell'apprendimento
Progetti di approfondimento ed esercitazioni da sviluppare durante il corso (in gruppo o singolarmente)
Nell'esame scritto e nella successiva verifica orale viene valutata la capacità di applicare le tecniche formali e di programmazione illustrate a lezione.
Con i progetti e le esercitazioni viene viene valutata la capacità di comprendere come tali tecniche possano essere estese e/o adapted ad altri contesti.
Modalità di esame
Il/la docente ha il dovere di vigilare affinché siano rispettate le regole di autenticità e originalità delle prove d'esame. Di conseguenza, nei casi in cui vi sia il sospetto di un comportamento irregolare, l'esame può prevedere un ulteriore approfondimento, contestuale alla prova d'esame, che potrà essere realizzato anche in modalità differente rispetto alle modalità sopra riportate.
Graduazione dei voti
La prova orale serve anche quale convalida della valutazione dello scritto.
Metodi didattici
Altre informazioni
Alcuni corsi sugli stessi argomenti:
- Uday Reddy at Bham: https://www.cs.bham.ac.uk/~udr/popl/
- Kathleen Fisher at Tufts: https://www.cs.tufts.edu/comp/150PLD/
Linguaggi funzionali
- Scala: https://dotty.epfl.ch/
- Haskell: https://www.haskell.org/
- Elixir: https://elixir-lang.org/