ADVANCED PROGRAMMING LANGUAGES
- Anno accademico
- 2025/2026 Programmi anni precedenti
- Titolo corso in inglese
- ADVANCED PROGRAMMING LANGUAGES
- Codice insegnamento
- CM0632 (AF:576797 AR:323801)
- Lingua di insegnamento
- Inglese
- Modalità
- In presenza
- Crediti formativi universitari
- 6
- Livello laurea
- Laurea magistrale (DM270)
- Settore scientifico disciplinare
- INF/01
- Periodo
- II Semestre
- Anno corso
- 1
- Sede
- VENEZIA
- Spazio Moodle
- Link allo spazio del corso
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
- Evoluzione dei linguaggi di programmazione.
- Programmazione Funzionale in Scala.
Typing foundations dei linguaggi di programmazione
- Applied Lambda Calculus. Sintassi e semantica operazionale.
- Typing: types, type systems, type safety
Functional data and function modeling in Scala
- Strutture dati immutabili e non-incapsulate in Scala
- Liste, alberi: funzioni di ordine superiore e polymorfe
Subtyping e subtype polymorphism
- Il principio di sostituzione e la relazione di sottotipo.
- Typing e Subtyping: nominale vs strutturale
Object-Oriented data modeling
- Encapsulated data types: traits, classi e gerarchie di tipo
Type parametrization
- Generics, varianza e e type bounds
- Collections
Ad hoc polymorphism
- Da overloading a polimorfismo parametrico (bounded)
- Qualified types e type classes
Strict vs Non-strict evaluation
- Strategie di valutazione: fondamenti e conseguenze per l'implementazione
- Lazy evaluation al lavoro: thunks, lazy lists e strutture dati infinite
Gestione degli errori
- Eccezioni: punti di forza, debolezza e alternative.
- Options e Try in Scala
Monads and monadic programming
- Conceptual framework
- Applications
Testi di riferimento
Artima Press. 2021.
[FP-Scala] Functional Programming in Scala. P. Chiusano, R. Bjarnason. Manning Press. 2015
Source code available at: https://github.com/fpinscala/fpinscala/
[TAPL] Types and Programming Languages. B.C. Pierce. The MIT Press. 2002.
Modalità di verifica dell'apprendimento
Progetto di approfondimento condiviso con ciascuno studente (o con un gruppo).
Nell'esame scritto e nella successiva verifica orale viene valutata la capacità di applicare le tecniche formali e di programmazione illustrate a lezione.
Con il progetto di approfondimento viene valutata la capacità di comprendere come tali tecniche possano essere estese e/o adapted ad altri contesti.
Nella valutazione finale, lo scritto pesa l'7% e il progetto il 30%
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
Metodi didattici
Altre informazioni
Alcuni corsi sugli stessi argomenti:
- Silvia Crafa at the University of Padua: https://elearning.unipd.it/math/course/view.php?id=886
- Uday Reddy at Bham: https://www.cs.bham.ac.uk/~udr/popl/
- Kathleen Fisher at Tufts: https://www.cs.tufts.edu/comp/150PLD/
Scala
- https://dotty.epfl.ch/
Python Typing:
- https://realpython.com/python-type-checking/
Asynchronous programming in Scala:
- https://alexn.org/blog/2017/01/30/asynchronous-programming-scala/
- https://www.packt.com/asynchronous-programming-futures-and-promises/
- https://blog.hgadgil.com/general-programming/asynchronous-programming-scala-future/
- https://docs.scala-lang.org/overviews/core/futures.html
Error Handling in Scala
- https://blog.rockthejvm.com/idiomatic-error-handling-in-scala/
- https://mauricio.github.io/2014/02/17/scala-either-try-and-the-m-word.html
Monads in Scala:
- https://medium.com/free-code-camp/demystifying-the-monad-in-scala-cc716bb6f534