Details

Assignments

Quizzes

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.

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:

You must design tests to correctly identify buggy implementations as incorrect. This will force you to learn the language.

You will be asked to write a tiny interpreter for a subset of the language's core.

You will write a desugaring transformer to a core language. We will explain what this means in class.

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.

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.

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.