FOUNDATIONS AND LANGUAGES FOR DISTRIBUTED PROGRAMMING
Academic Year 2021/2022 - 1° Year - Curriculum Sistemi di Rete e SicurezzaCredit Value: 6
Taught classes: 24 hours
Exercise: 24 hours
Term / Semester: 2°
Learning Objectives
Knowledge and understanding: The course aims to make the students aquainted with some of the foundational theories on concurrent and distributed computing. Students will learn to recognize the "core" and relevant parts common to all concurrent and distributed programming languages, as well as to isolate their characterizing parts,
Applying knowledge and understanding: The study of foundational theories (see previous item) will be paired with programming activities on different languages based on such theories.The languages dealt with during the course are industry level languages like Erlang (based on the actor concurrency model) and didactic and sperimental languages like PICT or SePi (both based on the pi-calculus; and on the theory of session types for what concerns the second one).
Making judgements: The students will be encouraged to autonomously applying - on simple but actual programming examples - what learned in the general context of the foundational theories. They will be also encouraged to frame their past concurrent programming experiences in the abstract and formal contexts of the foundational theories.
Communication skills: The students will acquire the necessary communication skills and expressive ability in order to express in a formal and non-ambiguous way topics and arguments related to distributed and concurrent programming.
Learning skills: The students will be anabled to autonomously facing the study of distributed and concurrent languages, as well as to recognize and isolate their characterizing foundational aspects.
Course Structure
Each lesson is divided into two parts. The first one (about one third of the time) is devoted to the solution of exercises and to the clarification of unclear topics of the previous lessons. The second part is devoted to the explanation of new topics.
Should teaching be carried out in mixed mode or remotely, it may be necessary to introduce changes with respect to previous statements, in line with the programme planned and outlined in the syllabus.
Learning assessment may also be carried out on line, should the conditions require it.
Detailed Course Content
- Concurrent and distributed programming in non-imperative programming paradigms. Introduction to Functional Programming.
- Main functional-programming concepts: Order of evaluation, Recursion; Higher-order functions; Anonymous functions; Curryfication; Lists; Recursion; Correctness proofs.
- Short review of the Lambda-calculus
- Types for functional programming.
- Introduction to Haskell; Polymorphic types; Pattern Matching; Type Classes. Infinite structures.
- Tail recursion
- The actors model of concurrent programming; A Concurrent functional language: Erlang
- Concurrent Programming in Erlang
- Process calculi: Introduction to the Pi-calculus;.
- Process calculi: Sketchy introduction to contextual equivalence and bisimulation
- Introduction to the PICT language; Core Pict.
- Overview of Session Types.
- Session and Refinement Types: the language SePi.
- Introduction to Scribble
- An experimental language with multiparty session types
- Overview of process calculi for distributed programming.
- Basics of distributed programming in Erlang.