ADVANCED PROGRAMMING LANGUAGES

Anno accademico
2025/2026 Programmi anni precedenti
Titolo corso in inglese
ADVANCED PROGRAMMING LANGUAGES
Codice insegnamento
CM0632 (AF:576783 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
Il corso fornisce un'introduzione ai fondamenti della teoria dei linguaggi e un'analisi approfondita dei meccanismi e tecniche più avanzate dei linguaggi di programmazione moderni. Permette quindi:
- 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.

Il corso permette di:
- 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

Si assume una conoscenza di base dei principi della programmazione.
Introduzione
- 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


[Scala] Programming in Scala (5th Edition). M. Odersky, L. Spoon, B. Venners, F. Sommers.
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.
Esame scritto con successiva verifica orale dell'elaborato scritto.
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%
scritto e orale
Nella valutazione finale, lo scritto pesa l'70% e il progetto il 30%
Lezioni in class, con esercizi in classe e proposti per casa.
Programma definitivo.
Data ultima modifica programma: 14/04/2025