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
- Single/Multi-Dispatching
- (Multiple-) Inheritance
- Delegation and Prototype Based Programming
- Aspect Oriented Programming
- Meta programming
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.
Examination
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. It is permitted to prepare a double-sided A4 sheet of paper for the written exam and bring it to the exam.
Course requirements
IN0001 Introduction to Informatics, IN0002 Fundamentals of Programming (Exercises & Laboratory), IN0003 Functional Programming and Verification, at least one programming language
Resources
- Selected literature of the area and appropriate conference or journal papers. Excerpts from topic-based literature: Topic: - Memory Consistency [11] - Functional Memory Model [2] - Transactional Memory [4] - Synchronization in Functional Programming [8] - Multiple Dispatching [7] - Multiple inheritance [3] - Mixins [1] and Traits [9] - Prototype Based Programming [5] - Aspect Oritentation [6] - Metaprogramming [10 References: [1] Gilad Bracha and William Cook. “Mixin-based inheritance”. In: European conference on object-oriented programming on Object-oriented programming systems, languages, and applications (OOPSLA/ECOOP) (1990). [2] Stephen Dolan, KC Sivaramakrishnan, and Anil Madhavapeddy. “Bounding data races in space and time”. In: (June 2018). doi: 10.1145/3296979.3192421. [3] Margaret A. Ellis and Bjarne Stroustrup. The Annotated C++ Reference Manual. Addison-Wesley, 1990. isbn: 0-201-51459-1. [4] Tim Harris, James Larus, and Ravi Rajwar. “Transactional Memory, 2nd edition”. In: Synthesis Lectures on Computer Architecture 5.1 (2010), pp. 1–263. [5] Roberto Ierusalimschy. Programming in Lua, Third Edition. Lua.Org, 2013. isbn: 859037985X. [6] H. Masuhara, G. Kiczales, and C. Dutchyn. “A Compilation and Optimization Model for Aspect-Oriented Programs”. In: Compiler Construction. Lecture Notes in Computer Science 2622 (2003). Ed. by G”orel Hedin, pp. 46–60. [7] Radu Muschevici et al. “Multiple dispatch in practice”. In: Proceedings of the 23rd Annual ACM SIGPLAN Conference on Object-Oriented Programming, Systems, Languages, and Applications, OOPSLA 2008, October 19-23, 2008, Nashville, TN, USA. Ed. by Gail E. Harris. ACM, 2008, pp. 563–582. doi: 10.1145/1449764. 1449808. url: https://doi.org/10.1145/1449764.1449808. [8] Simon Peyton Jones, Andrew Gordon, and Sigbjorn Finne. “Concurrent Haskell”. In: Proceedings of the 23rd ACM SIGPLAN-SIGACT Symposium on Principles of Programming Languages. POPL ’96. St. Petersburg Beach, Florida, USA: Association for Computing Machinery, 1996, pp. 295–308. isbn: 0897917693. doi: 10.1145/237721.237794. url: https://doi.org/10.1145/237721.237794. [9] Nathanael Sch¨arli et al. “Traits: Composable Units of Behaviour”. In: European Conference on Object-Oriented Programming (ECOOP) (2003). [10] Peter Seibel. Practical Common Lisp. 1st. USA: Apress, 2012. isbn: 1430242906. url: https://gigamonkeys.com/book/. [11] Daniel J. Sorin, Mark D. Hill, and David A. Wood. A Primer on Memory Consistency and Cache Coherence. 1st. Morgan & Claypool Publishers, 2011. isbn: 1608455645, 9781608455645.
Activities
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.
Additional information
- More infoCoursepage on website of Technical University of Munich
- Contact a coordinator
- CreditsECTS 6
- Contact hours per week3
- InstructorsHelmut Seidl, Sarah Tilscher, Michael Petter
- Mode of instructionHybrid
Offering(s)
Start date
16 October 2024
- Ends5 February 2025
- Term *Winter 2024/2025
- Instruction language
Enrolment period closed