Practical Course: Execution Platform Development
Content
Write your own part of a compiler toolchain or runtime system for a programming language in one semester in a small group.
You will gain an in-depth understanding of how programming languages are compiled and executed on modern systems. You will also get experience in writing a large-ish and high-performant project in a systems programming language (preferably C/C++ or Rust).
Organization
You will work in teams of 2–4 students on a topic and will get a member of the chair as advisor. There are no weekly meetings, but you should meet with your advisor every 2–4 weeks. Deliverables are an interim presentation (ungraded), the final implementation (50% of grade), a short report (8–10 pages; 25% of grade), and a final presentation (25% of grade).
- Preliminary meeting: 2024-01-31, 14:00 s.t., online via BBB
- Attendance not required and does not affect our selection.
- Topic/group assignment: beginning of April
- Interim presentation: beginning of July (on-site, attendance required)
- Code and report due: mid-October (before lecture start of winter term)
- Final presentation: mid-October (around lecture start of winter term) (on-site, attendance required)
Prerequisites and Qualification
Familiarity with computer architecture (IN0004), operating systems (IN0009/IN0034), and a systems programming language (preferably C, C++, or Rust) is required.
You need to qualify for participation, because of group work (we want to avoid groups with wildly varying prior knowledge and motivation). Send us a link to some non-trivial source code you wrote in a systems programming language in one of your projects and very briefly explain your personal highlights (e.g., difficult problems you solved) when writing that code. In large projects or collaborations, point out the code region we should look at.
Some guidelines for the code you submit for qualification:
- Your code doesn’t need to be open source, but you should grant us temporary read-only access until the matching is over.
- We prefer code from personally driven projects (e.g. private or thesis projects), not from highly specified course assignments.
- If you can’t provide such code, but nonetheless feel qualified, write an e-mail and explain your qualification.
Possible Topics
- WebAssembly runtime
- JavaScript Interpreter (ECMAScript 3)
- Debugger
- Linker
- C compiler
- CPU simulator
- … (depends on interests of participants)
Speculatively Answered Questions
-
Q: How much effort are these projects?
A: These are bigger projects, but you work in groups and have 6 months time. However, through scoping (in agreement with your advisor), all projects have a reasonable size and we will consider unforeseen difficulties.
-
Q: What is graded?
A: The grade consists of the implementation (50%), the report (25%), and the final presentation (25%). Individual grading of different parts of the implementation is possible.
-
Q: Why group work? I want to work alone/fear of having weak group members.
A: Many non-trivial software projects are too large to be developed alone in a reasonable time frame. Group work allows for larger/more interesting projects. We will do our best to only select applicants we consider qualified.