About this course
This is not a beginners programming course – Instead, this lecture focusses on the semantics of various programming language concepts, and their implementation from the point of view of a compiler engineer. Topics may include, among others:
- Relaxed Memory Models
- Wait-/Lock-free Programming
- Locks, Monitors & Condition Variables
- Transactional Memory
- Gotos, Co-Routines and Continuations
- (Multiple-) Inheritance
- Delegation and Prototype Based Programming
- Aspect Oriented Programming
- Meta programming
Expected learning outcomes
After successful completion of this module, students are familiar with an assortment of programming language constructs from popular programming languages. They understand the semantics of these constructs as well as the implementation consequences, that they inflict on the implementation as well as the runtime behavior of compiler and runtime system. They are able to analyze and compare different language based approaches, to discuss their relative merits and potential workarounds in case certain language features are missing. By means of this knowledge, they are able to extend existing compilers to handle the aforementioned constructs as well as able to re-encode concepts from one language by means of another language.
The assessment is by means of a written exam of 90 minutes. Individual assignments assess in how far students are able to reproduce the complex semantical behaviors of small example programs. Their knowledge and practical skills concerning programming constructs is further assessed by assignments, which ask to simulate programming language constructs of one kind by programming language constructs of another kind.
IN0001 Introduction to Informatics, IN0002 Fundamentals of Programming (Exercises & Laboratory), IN0003 Functional Programming and Verification, at least one programming language
By means of pre-recorded lesson videos of around 15 minutes each, students can prepare the lecture content at their own pace. In the classroom, students can open discussion on unclear parts of the lesson videos. Additionally, illustrating examples and live programming enhance and deepen the student’s insights into the topics. Selected problems that are then solved by the joined effort of the audience and the lecturer further illustrate the lessons with hands-on experiences. In the additionally offered exercise course (2h), accompanying assignments for individual study deepen the understanding of the concepts explained in the lecture, train students to apply the learnt concepts in implementations and develop the skill to to simulate the effect of missing language features by others.