Though this course is over, the assignments are designed so you can do them any time you want. In other words, you can run this class (for yourself) right now, in full!


You will have four kinds of assignments in this course.

For details about turning assignments in late, see our grade cap and late policy.


Every day (or almost every day), there will be a short quiz on that day's class topic. This will be due before the next class meeting. The quizzes should take no more than a few minutes to complete if you've understood the material.

Links to quizzes appear on the lecture notes & videos page. You can also see histograms for graded quizzes.

Small Project

For the first month-and-a-half, you will work on a small project. You will be given a language constructed by us, for which we have a reference (correct) implementation and lots of incorrect ones, as well as a definition of its core. There are five assignments:

  1. You must design tests to correctly identify buggy implementations as incorrect. This will force you to learn the language.
  2. You will be asked to write a tiny interpreter for a subset of the language's core.
  3. You will write a desugaring transformer to a core language. We will explain what this means in class.
  4. You will write an interpreter for the core language so that, when composed with the desugaring transformer, you have an implementation for the full language.
  5. You will be asked to extend the language in a few ways.
Assignment Out In (by 11:59 PM)
ParselTest 9/7 9/13
Interpreter 9/14 9/20
ParselDesugar 9/21 9/27
ParselCore 9/28 10/4
ParselCore (Extensions) 10/5 10/14

Note that you may re-handin programming assignments; see our grade cap policy.

Large Project

In the last two months, you will effectively repeat the small project in the large, this time implementing a desugaring tranformer and core interpreter for Python. You will be expected to design the core language; to help you with this, we will have design checks, where we will give you feedback on your designs. We will also publish successful designs, so if you feel stuck you can learn from (or even copy) core language designs from others.

Assignments released but not yet due appear in boldface. Note that you may re-handin programming assignments; see our grade cap policy.

Assignment Out In (by 11:59 PM)
Python (Part 1) 10/15 10/28
Python (Part 2) 11/2 11/15
Python (Part 3) 11/16 12/6
Python (Glory) 12/7

Written Homeworks

There will be four or five written homeworks on concepts covered in the course. They will be spread across the semester, and each will be due about a week later. Each such homework will have about three to four questions, and each question will usually have a relatively short answer—but, because the questions will tend to be open-ended, it may take some thought to answer them.

Assignment Out In (by 11:59 PM) /course/cs173/bin/cs173handin
Written: Scope 9/14 9/23 scope-writ
Written: Garbage Collection 9/28 10/14 gc-writ
Written: Continuations 10/17 10/25 cont-writ
Written: Typed 11/5 11/21 types-writ
Written: Laziness 11/26 12/2 laziness-writ