The main course project is building an in-browser, interactive compiler from (typed) Python programs to WebAssembly.
This project will allow us to explore a number of interesting features of compilation and build deployable, user-facing programming environments.
Weekly lectures will be a mix of practical tutorials on necessary tools and techniques, discussions of compilers concepts that we can apply to our projects, and review of solutions generated by the class.
We will also assign weekly readings from around the Web highlighting tools and techniques we need, and research papers that explore the space of compiler design.
The first two programming assignments will have individual submission. However, I encourage you to talk about your approaches and collaborate, you just must submit individually. There’s a lot of technology to learn in the course, so feel free to discuss liberally and share code snippets as necessary. In the assignment descriptions, there will be a place to give credit to other students you worked with, please use it!
The third programming assignment must be completed and submitted entirely on your own. This is one of the major assessments for the course, and you should treat it like a take-home exam.
These first three assignments are designed to get us all to a basic level of functionality and understanding. Then, you will have significant choice in the project you decide to work on, though generally we expect that projects will be extensions of the running compiler we develop in the first part of the course. Group work will be allowed (optionally) on the projects, with details to come.
This spreadsheet lists the readings, lecture topics, due dates, and assignments for the course.
Joe and Yousef have office hours where you can join a Zoom room and get a mix of one-on-one and group help (depending on your question):
You can also post questions to the course message board:
You will get an invite to in the first few days of the quarter. If you need anything in the meantime or can’t find your invite, you can email Joe at firstname.lastname@example.org.