ADVANCED PROGRAMMING LANGUAGES

Anno accademico
2024/2025 Programmi anni precedenti
Titolo corso in inglese
ADVANCED PROGRAMMING LANGUAGES
Codice insegnamento
CM0632 (AF:513724 AR:286756)
Modalità
In presenza
Crediti formativi universitari
6
Livello laurea
Laurea magistrale (DM270)
Settore scientifico disciplinare
INF/01
Periodo
I Semestre
Anno corso
1
Sede
VENEZIA
Spazio Moodle
Link allo spazio del corso
Il corso fornisce un'analisi approfondita dei meccanismi e tecniche più avanzate dei linguaggi di programmazione moderni insieme con un'introduzione ai fondamenti della teoria dei linguaggi e dei sistemi di tipo disponibili per valutare le scelte di progetto e di implementazione.

Il corso permette di:
- acquisire padronanza con le tecniche di progetto dei linguaggi di programmazione, e dei meccanismi e strumenti per valutarne l'efficienza, l'efficacia e i costi di
- apprendere gli elementi di base per l'analisi dei programmi e della loro correttezza
- di acquisire padronanza con le principali tecniche associate alla programmazione funzionale, a oggetti, e concorrente.
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 (in Scala)
- 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, oltre a una discussione su un argomento di approfondimento condiviso con ciascuno studente (o con un gruppo).
Nell'esame scritto viene valutata la capacità di applicare le tecniche formali e di programmazione illustrate a lezione. Nella discussione 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'80% e la discussione il 20%.
Lezioni in class, con esercizi in classe e proposti per casa.
Inglese
scritto e orale
Programma definitivo.
Data ultima modifica programma: 14/10/2024