Essentials of Programming Languages

Grundlagen von Programmiersprachen/ Essentials of Programming Languages


LecturerProf. Dr. Peter Thiemann
AssistantGabriel Radanne
LectureMonday, 2pm - 4pm, SR 01-016, Building 101
Wednesday, 2pm - 3pm, SR 01-016, Building 101
ExerciseWednesday, 3pm - 4pm, SR 01-016, Building 101



16.04.2018, 18.04.2018Introduction: syntax, abstract syntax, semantics stylesSlides 01-intro.pdf
23.04.2018, 25.04.2018State, the WHILE language, procedures, binding and scope, environmentsSlides 02-while.pdf
30.04.2018First-class functions and closuresSlides 03-closure.pdf
02.05.2018Exercise only
07.05.2018, 09.05.2018Lambda calculusSlides 04-lambda.pdf
14.05.2018Exercise only
16.05.2018TypesSlides 05-types.pdf
28.05.2018, 30.05.2018Type InferenceSlides 06-inference.pdf
04.06.2018, 06.06.2018Understanding Types, Data Abstraction, and PolymorphismSlides 07-understanding-types.pdf
11.06.2018, 13.06.2018No lecture, no exercise
18.06.2018ModulesSlides 08-modules.pdf
20.06.2018Understanding Types ..., final part
25.06.2018, 27.06.2018Java GenericsSlides 09-more-subtyping.pdf, Paper Making the Future Safe for the Past ..., Java Generics FAQ, Another Generics Tutorial, Towards a semantic model for Java wildcards, Taming wildcards in Java's type system, Java generics are Turing complete
02.07.2018, 04.07.2018Agda, a dependently typed programming language Tutorial slides, cheat sheet for Emacs Agda mode, Source code
09.07.2018Continuations, the ultimate control structureSlides 10-continuations.pdf
11.07.2018Continuations, continuedOlivier Danvy, Andrzej Filinski. Abstracting Control, Kenichi Asai, Oleg Kiselyov. Introduction to Programming with Shift and Reset
16.07.2018Behavioral types and a little bit concurrencySlides Principles and Practice of Session Types (Vasconcelos, Hu; 2014) , SEPI Demo, sepi.txt


The exercises for this lecture will be composed of a succession of language definitions, each with potential extensions. Your task is to implement these language definitions with PLT Redex, a Racket framework for implementing language semantics. Knowledge of Racket (or any other Lisp dialect) is not required. You are encouraged to consult the tutorial and the reference manual.

To get started, install the racket language on your system and launch the IDE "Dr Racket" (drracket on the command line).

18.04.2018Introduction and arithmetic expressions1-arith.pdf arith.rkt1-solution.rkt
06.05.2018Lambda calculus3-lambda.pdf subst.rkt 3-solution.rkt
28.05.2018Simply Typed Lambda Calculus4-stlc.pdf4-solution.rkt


The description of the project can be found here: project.pdf.

A preliminary racket file can be found here: base.rkt.