ADVANCED PROGRAMMING LANGUAGES

Anno accademico
2022/2023 Programmi anni precedenti
Titolo corso in inglese
ADVANCED PROGRAMMING LANGUAGES
Codice insegnamento
CM0632 (AF:398284 AR:214952)
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 a oggetti (e di Java).
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: State, IO

Parallel & Concurrent computation
- Models of parallel and concurrent computation: from shared memory to actors.
- Concurrent and asynchronous computations with Futures


[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)
Lezioni in class, con esercizi in classe e proposti per casa.
Inglese
scritto e orale

Questo insegnamento tratta argomenti connessi alla macroarea "Economia circolare, innovazione, lavoro" e concorre alla realizzazione dei relativi obiettivi ONU dell'Agenda 2030 per lo Sviluppo Sostenibile

Programma definitivo.
Data ultima modifica programma: 15/09/2022