15-501/15-819 HOT Compilation, Fall 2006

Course Information

The course covers the implementation of compilers for higher-order, typed languages such as ML and Haskell, and gives an introduction to type-preserving compilation. Topics covered include elaboration, CPS conversion, closure conversion, garbage collection, phase splitting, and typed assembly language.

Instructor: Karl Crary <crary@cs.cmu.edu>
TA: Akiva Leffert <aleffert@andrew.cmu.edu>
Time: Tue/Thu 1:30 am - 2:50
Location: Porter Hall A22


Dec 9 The garbage collection assignment is out. You are encouraged to submit it before it is due.
Nov 29 The combined CPS/Closure conversion assignment is out.
Nov 10 The phase splitting assignment is now available.
Oct 25 The elaboration assignment is now available.
Oct 11 Last year's inference assignment handout is available for anyone curious. Note that this is not an actual assignment for this year's course and is merely for the curious.
Sep 14 A handout explaining Σ kinds is now available. Additionally, an email went out to all people we have listed for the course. Email Akiva if you did not receive it and should be on the list.
Sep 5 The first assignment, a type checker for Fω is now available.


Students will complete 6 projects by the end of the semester. The precise project schedule will be determined as the semester progresses. The projects currently planned are as follows (subject to change):

  1. Typechecking Fω (handout, codebase)
  2. Elaboration (handout, codebase)
  3. Phase splitting (handout, codebase)
  4. CPS/Closure conversion (handout, codebase)
  5. Garbage collection
  6. (handout, codebase)

Students enrolled in the graduate version of the course, 15-819, will do one extra project of their choice at some point during the semester. Some suggestions include writing a TAL code generator, adding some type-directed optimization phases, ...


Submit your projects via AFS by copying the relevant files to

/afs/andrew/course/15/501-819/submit/<your Andrew id>/<assn>

where <your Andrew id> is replaced with your Andrew id and <assn> is replaced with the project name. (You must be authenticated to your Andrew id in order to access this directory. If you primarily use machines in the cs.cmu.edu realm, you can try authenticating by executing the command

klog <your andrew id>@andrew.cmu.edu

If that doesn't work, just log into an Andrew machine to submit your code.)


For each project, students will submit a solution on that project's due date, and this solution will be automatically checked against several test cases. If the solution is satisfactory, the student receives an A for that project. Otherwise, the student will receive feedback explaining how their solution failed and be given an opportunity to produce another solution. Students have until the end of the semester to produce adequate solutions to all the projects.

Everyone who completes all the projects successfully by the end of the semester receives an A. The grading policy is left unspecified for students who do not complete all the projects successfully by the end of the semester. Please don't force us to find out what happens.