CS 6983 Compiling Functional Languages:
The Technology of Lambda

Spring 2025

There may, indeed, be other applications
of the system than its use as a logic.
—A. Church

Office email Office hours
Olin Shivers WVH 318 shivers@ccs TBD & by appt
Lectures are Tuesdays & Fridays, 3:25–5:05, Ryder 128

Course description

The course will cover the basic technologies of compiling higher-order functional programming languages with call-by-value semantics. In other words: how does one write a compiler for Scheme, OCaml or SML?

The one notable element of this task to which we won't devote too much time is types; this subject is rich enough that it deserves more time and focus than we can manage given the total scope of our subject. It is covered well in other classes here at Khoury College, and you should study them; any serious student of programming languages should be knowledgeable of this material.

This class will spend no time on the basic topics covered by a first compiler class for standard, first-order procedural languages such as C: lexing, parsing, type checking, ASTs, intermediate representations, instruction selection, register allocation and so forth. We will assume knowledge of these topics and focus on the suite of technologies that have been developed specifically to deal with the requirements of functional languages.

We'll use Dybvig, Keep, and Sarkar's Nanopass compiler-development infrastructure as an implementation aide to build a simple, basic, non-optimising compiler for an untyped functional language (that is, Scheme). Then we'll use the understanding gained from this foundation to consider techniques for higher-performance compilation.

See the "Course schedule" lecture list (linked below) for the full set of individual topics to be covered over the semester. Note that this is subject to change, so keep an eye on it as the semester progresses.

Other

Course schedule: This is the central file for course-related information.

Piazza: https://piazza.com/northeastern/spring2026/cs6983


Assignments

Note: these dates have not been tuned yet for Spring 2026.

  1. Nanopass Warmup (due 1/18 midnight)
  2. CPS (due 2/5 midnight)
  3. Simplifier (due 2/29 midnight)
  4. Closure Conversion I (due 3/22 midnight)
  5. Closure Conversion II (due 4/15 midnight)

Resources

Here is the code for a CPS interpreter written in Racket, which you can use to test your code.

Here is the code for an AM interpreter written in Racket, which you can use to test your code. Be warned: it runs all the AM examples in the project-description file, but it has not been tested very thoroughly, so it may blow up. Email me bug reports if anything goes wrong.

I am putting a collection of papers and larger reports and monographs with an annotated bibliography. (But the raw directory listing might also be useful.)