Teaching
Current Summer Term 2026
- Types and Programming Languages
- Modern C++
- Oberseminar Types and Programming Languages
Courses
Compiler Construction
This course introduces the core concepts and design principles behind modern compilers, covering topics such as lexing, parsing, intermediate representations, LLVM, optimization, instruction selection, and register allocation. It provides students with a structured understanding of the full compilation pipeline and the techniques used to translate high-level programs into efficient machine code. We strongly recommend taking this course together with the Compiler Lab, which complements the material with hands-on implementation experience.
Compiler Lab
In this lab, students build a C compiler from scratch in C++ on top of LLVM, putting key compiler concepts into practice in a complete implementation project. Along the way, they develop and integrate components such as the frontend, intermediate representation handling, and code generation within a modern compiler framework. We strongly recommend taking the lab together with Compiler Construction, as the two courses are designed to complement each other closely.
Betriebssysteme
Diese Vorlesung vermittelt die grundlegenden Konzepte und Techniken moderner Betriebssysteme. Behandelt werden die klassischen Themen wie Prozesse und Threads, Synchronisation, Scheduling, Speicherverwaltung, Dateisysteme sowie Ein- und Ausgabe. Begleitend bearbeiten die Studierenden praktische Programmierprojekte am realen Lehrbetriebssystem Pintos, um die vermittelten Inhalte direkt umzusetzen.
Types and Programming Languages
This course introduces the foundations of programming language design and semantics, with a focus on type systems and their role in ensuring program correctness, safety, and expressiveness. Topics include the lambda calculus, type checking and inference, operational semantics, and the metatheory of programming languages, alongside selected advanced subjects such as theory of computation, typed intermediate representations, dependent types, computational logic, and proof assistants. It is aimed at students who want to develop a rigorous understanding of modern programming languages and the formal principles underlying their design.
Introduction to Rust
This lab provides a comprehensive introduction to Rust, covering the language’s core concepts and programming idioms with a focus on safe and efficient systems programming. Through practical programming exercises, students learn about ownership, borrowing, lifetimes, algebraic data types, pattern matching, traits, and error handling, while developing a solid understanding of Rust’s approach to memory safety and concurrency. The lab concludes with a medium-sized project that gives students the opportunity to apply these concepts in a larger implementation task.
Modern C++
This lab offers a comprehensive introduction to modern C++, covering the language and its core programming idioms in depth. Using small competitive-programming-style exercises as a learning tool, students practice writing clear, efficient, and robust code while becoming familiar with essential features of contemporary C++. The lab concludes with a medium-sized project that allows students to apply and consolidate the concepts they have learned in a more substantial programming task.
Oberseminar Types and Programming Languages
Das Oberseminar bietet Bachelor- und Masterstudierenden die Möglichkeit, ihre Abschlussarbeiten im Bereich Types and Programming Languages vorzustellen und zu diskutieren. Darüber hinaus lesen und besprechen wir aktuelle wissenschaftliche Arbeiten aus diesem Forschungsgebiet. Es dient damit sowohl dem fachlichen Austausch als auch der Einübung wissenschaftlicher Präsentation und Diskussion.