Essentials of Programming Languages
Grundlagen von Programmiersprachen/ Essentials of Programming Languages
General
Lecturer | Prof. Dr. Peter Thiemann |
Assistant | Gabriel Radanne |
Lecture | Monday, 2pm - 4pm, SR 01-016, Building 101 |
Wednesday, 2pm - 3pm, SR 01-016, Building 101 | |
Exercise | Wednesday, 3pm - 4pm, SR 01-016, Building 101 |
News
Classes
Date | Topics | Material |
---|---|---|
16.04.2018, 18.04.2018 | Introduction: syntax, abstract syntax, semantics styles | Slides 01-intro.pdf |
23.04.2018, 25.04.2018 | State, the WHILE language, procedures, binding and scope, environments | Slides 02-while.pdf |
30.04.2018 | First-class functions and closures | Slides 03-closure.pdf |
02.05.2018 | Exercise only | |
07.05.2018, 09.05.2018 | Lambda calculus | Slides 04-lambda.pdf |
14.05.2018 | Exercise only | |
16.05.2018 | Types | Slides 05-types.pdf |
28.05.2018, 30.05.2018 | Type Inference | Slides 06-inference.pdf |
04.06.2018, 06.06.2018 | Understanding Types, Data Abstraction, and Polymorphism | Slides 07-understanding-types.pdf |
11.06.2018, 13.06.2018 | No lecture, no exercise | |
18.06.2018 | Modules | Slides 08-modules.pdf |
20.06.2018 | Understanding Types ..., final part | |
25.06.2018, 27.06.2018 | Java Generics | Slides 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.2018 | Agda, a dependently typed programming language | Tutorial slides, cheat sheet for Emacs Agda mode, Source code |
09.07.2018 | Continuations, the ultimate control structure | Slides 10-continuations.pdf |
11.07.2018 | Continuations, continued | Olivier Danvy, Andrzej Filinski. Abstracting Control, Kenichi Asai, Oleg Kiselyov. Introduction to Programming with Shift and Reset |
16.07.2018 | Behavioral types and a little bit concurrency | Slides Principles and Practice of Session Types (Vasconcelos, Hu; 2014) , SEPI Demo, sepi.txt |
Exercises
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).
Date | Sheet | Material | Solutions |
---|---|---|---|
18.04.2018 | Introduction and arithmetic expressions | 1-arith.pdf arith.rkt | 1-solution.rkt |
30.04.2018 | While | 2-while.pdf | 2-solution.rkt |
06.05.2018 | Lambda calculus | 3-lambda.pdf subst.rkt | 3-solution.rkt |
28.05.2018 | Simply Typed Lambda Calculus | 4-stlc.pdf | 4-solution.rkt |
26.06.2018 | Minijs | 5-minijs.pdf |
Project
The description of the project can be found here:
project.pdf.
A preliminary racket file can be found here:
base.rkt.
Literature
- Script: Principles of Programming Languages by Peter Thiemann.
- The lecture is based on the following book (referred to as PFPL): Practical Foundations for Programming Languages by Robert Harper. A working draft and an online preview is avaliable online at http://www.cs.cmu.edu/~rwh/.
- The lecture's exercise main source is the book: Semantics Engineering with PLT Redex by Matthias Felleisen, Robert Bruce Findler and Matthew Flatt.
- Further material may be found in EOPL3: Essentials of Programming Languages. Third edition. Daniel P. Friedman and Mitchell Wand. MIT Press, Cambridge, Massachusetts. ISBN 978-0-262-06279-4.