ADVANCED PROGRAMMING LANGUAGES

Academic year
2025/2026 Syllabus of previous years
Official course title
ADVANCED PROGRAMMING LANGUAGES
Course code
CM0632 (AF:576797 AR:323801)
Teaching language
English
Modality
On campus classes
ECTS credits
6
Degree level
Master's Degree Programme (DM270)
Academic Discipline
INF/01
Period
2nd Semester
Course year
1
Where
VENEZIA
The course provides an introduction to the fundamentals of language theory and an in-depth analysis of the most advanced mechanisms and techniques used in modern programming languages. It therefore enables students:
- to understand the mathematical tools that support computer science;
- to use these tools to enhance their ability to address scientifically relevant problems and to develop complex applications.


The course enables students to:
- acquire specialized knowledge of the design techniques used in advanced programming languages;
- acquire specialized knowledge of software verification tools;
- develop the ability to apply this knowledge to assess the effectiveness of these techniques and tools in the development of complex software systems.
Knowledge of the basic principles of programming languages is assumed.
Introduction
- Evolution of programming languages design and implementation
- Introduction to functional programming and Scala.

Typing foundations of programming languages
- Applied Lambda Calculus. Syntax and operational semantics
- Typing: types, type systems, type safety (with TALC)

Functional data and function modeling in Scala
- Immutable non-encapsulated data structures in Scala
- Lists and trees: first-order, higher-order and polymorphic functions

Subtyping and subtype polymorphism
- The substitution principle and the subtype relation
- Typing and Subtyping: nominal vs structural

Object-Oriented data modeling (in Scala)
- Encapsulated data types: Scala’s traits, classes, and hierarchy of types,

Type parametrization
- Generics, variance and type bounds
- Collections

Ad hoc polymorphism
- From overloading to constrained parametric polymorphism (with F-bounded polymorphism)
- Qualified types and type classes

Strict vs Non-strict evaluation
- Evaluations strategies: foundations and implementation consequences
- Lazy evaluation at work: thunks, lazy lists and infinite data structures

Error handling
- Exceptions: strengths, weaknesses and alternatives.
- Options and Try computations 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.
Written exam followed by an oral discussion of the written work.
An in-depth project is agreed upon with each student (or group).
The written exam and subsequent oral discussion assess the ability to apply the formal and programming techniques presented in class.
The in-depth project evaluates the ability to understand how these techniques can be extended and/or adapted to other contexts.


written and oral
In the final evaluation, the written exam accounts for 70% and the project for 30%
Class lectures with in-class exercises, and additional exercises proposed as homework.
Definitive programme.
Last update of the programme: 14/04/2025