ADVANCED PROGRAMMING LANGUAGES
- Anno accademico
- 2022/2023 Programmi anni precedenti
- Titolo corso in inglese
- ADVANCED PROGRAMMING LANGUAGES
- Codice insegnamento
- CM0632 (AF:398285 AR:214952)
- Lingua di insegnamento
- Inglese
- 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
Inquadramento dell'insegnamento nel percorso del corso di studio
Risultati di apprendimento attesi
- 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.
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 (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
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
Modalità di esame
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
Obiettivi Agenda 2030 per lo sviluppo sostenibile
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