Programming Paradigms (Winter Semester 2019/20)

Überblick

Lecturer Prof. Dr. Michael Pradel
Teaching assistants Luca Di Grazia, Daniel Lehmann, Moiz Rauf, Jibesh Patra, Florian Stober
Course type Lecture + Exercises
Language Lectures in German. All written material (slides, exercises, etc.) in English. Exercise sessions in German or English.
Ilias Ilias course with forum and quizzes
Place Mondays: Pfaffenwaldring 7, V 7.02
Fridays: Universitätsstr. 38, 38.04

Content

This course introduces the concepts of programming languages. Starting from how to describe the syntax of a language, we will cover core language design concepts, such as scopes, binding, control flow, types, control abstraction, and data abstraction. The course discusses different programming language paradigms, including imperative languages, functional languages, and logic languages. We also cover language support for concurrency and features of dynamic languages. By gaining a a deeper understanding of language concepts, the course enables students to make best use of a given programming language and to choose the most suitable language for a given development task.

Schedule of Lectures

This is a plan, i.e., it may change. For dates and locations of exercise groups, see C@mpus. Groups 1, 5, 6, 7, and 10 are in English. Groups 2, 3, 4, 8, and 9 are in German.

Date Topic Material
Oct 14, 2019 Lecture: Introduction Slides and notes
Chapter 1 in PLP book
Oct 18, 2019 Lecture: Syntax Slides and notes (part 1)
Chapters 2.1 and 2.2 in PLP book
Oct 20, 2019 Exercise 1 published: Grammars and scanning Exercise sheet
Code and data
Oct 27, 2019 Exercise 1 due
Oct 28, 2019 Lecture: Syntax Slides and notes (part 2)
Slides and notes (part 3)
Chapter 2.3 in PLP book
Nov 3, 2019 Exercise 2 published: Parsing Exercise sheet
Code and data
Nov 4, 2019 Lecture: Names, Scopes, Binding Slides and notes (part 1)
Chapters 3.1 to 3.2 in PLP book
Nov 10, 2019 Exercise 2 due
Nov 17, 2019 Exercise 3 published: Names, Scopes, Binding Exercise sheet
Code and data
Nov 18, 2019 Lecture: Names, Scopes, Binding Slides and notes (part 2)
Chapters 3.3 to 3.6 in PLP book
Nov 24, 2019 Exercise 3 due
Nov 25, 2019 Lecture: Control Flow Slides and notes (part 1)
Chapters 6.1 to 6.2 in PLP book
Nov 29, 2019 Lecture: Control Flow Slides and notes (part 2)
Chapters 6.4 to 6.6 in PLP book
Dec 1, 2019 Exercise 4 published: Control Flow Exercise sheet
Code and data
Dec 2, 2019 Lecture: Type Systems Slides and notes
Chapters 7.1 to 7.2 in PLP book
Dec 6, 2019 Lecture: Type Systems Slides and notes
Chapters 7.2 to 7.4 in PLP book
Chapters 3 and 8 in TAPL book
coercions.c
Dec 8, 2019 Exercise 4 due
Dec 9, 2019 Lecture: Composite Types Slides and notes
Chapters 8.1 to 8.2 in PLP book
union.c
Dec 13, 2019 Lecture: Composite Types Slides and notes
Chapter 8.5 in PLP book
Dec 16, 2019 Lecture: Subroutines and Control Abstraction Slides and notes
Chapters 9.1 to 9.3 in PLP book
Dec 20, 2019 Lecture: Subroutines and Control Abstraction Slides and notes
Chapters 9.4 to 9.6 in PLP book
NestedHandlers.java
SwallowedExceptions.java
signal2.c
Jan 5, 2019 Exercise 5 published: Types Exercise sheet
Code and data
Jan 10, 2020 Lecture: Data Abstraction and Object Orientation Slides and notes
Chapters 10.1 to 10.3 in PLP book
account.cpp
Liskov.java
Virtual.cpp
Inheritance.cpp
Immortal.java
Jan 12, 2019 Exercise 5 due
Jan 13, 2020 Lecture: Data Abstraction and Object Orientation Slides and notes
Chapters 10.4 to 10.6 in PLP book
Abstract.java
Abstract.cpp
Jan 19, 2019 Exercise 6 published: Data Abstraction Exercise sheet
Code and data
Jan 20, 2020 Lecture: Concurrency Slides and notes
Chapter 13.1 and 13.2 in PLP book
Jan 24, 2020 Lecture: Concurrency Slides and notes
Chapter 13.3 and 13.4 in PLP book
Synchronized.java
Jan 26, 2019 Exercise 6 due
Feb 3, 2020 Lecture: Dynamic Languages Slides and notes
Chapter 14.1, 14.2, and 14.4 in PLP book
strictMode.js
ReDoS.js
Feb 7, 2020 Lecture: Functional Languages Slides and notes
Chapter 11.1, 11.2, 11.3, and 11.5 in PLP book
March 25, 2020 Exam