15-417 HOT Compilation
Spring 2014

Karl Crary
TR Noon -- 1:30
Gates-Hillman 4101

Course Information

The course covers the implementation of compilers for higher-order typed languages such as ML. Topics include type checking, type directed compilation, elaboration, phase splitting, CPS conversion, closure conversion, allocation, and garbage collection. The course is disjoint from the standard compilers course (15-411); thus, topics such as parsing and code generation are not covered. Students will implement an ML compiler and runtime system as a term project.

Prerequisite: 15-312 Principles of Programming Languages (or equivalent)

There is no textbook for the course. Attendance in lectures is essential.

Announcements

Apr 22 The final due date for all projects and project revisions is May 13.
Apr 22 The final project has been issued. It is due May 13.
Mar 31 The sixth project has been issued. It is due April 24.
March 25 The fifth project has been issued. It is due April 10.
Mar 6 The fourth project has been issued. It is due March 25.
Mar 6 To typeset an atom in Latex, use the macros:
\newcommand{\satom}[1]{\llparenthesis{\,#1\,}\rrparenthesis}
\newcommand{\datom}[1]{\langle\hspace{-0.2em}|%
{\,#1\,}|\hspace{-0.2em}\rangle}
This will require the stmaryrd package.
Feb 19 The third project has been issued. It is due March 6.
Feb 4 The second project has been issued. It is due February 11.
Jan 28 The first project has been issued. It is due February 4.

Topics

Jan 14 F-omega
Jan 16 Typechecking for F-omega
Jan 21 Binding
Jan 28 Singleton kinds
Feb 4 Typechecking for singleton kinds
Feb 6 Type-directed translation
Feb 11 CPS conversion
Feb 20 Closure conversion
Feb 27 Allocation
Mar 4 Module type theory
Mar 20 Phase splitting
Apr 1 Garbage collection
Apr 8 Elaboration

Projects

Students will complete several projects through which they will implement an ML compiler and runtime system.

Form of projects

For each project, students will be given a Standard ML signature to implement. The intended meaning of that signature will be made clear in class. Attendance in lectures is essential.

This signature to implement will be included in a collection of resource code that we will supply. Students should not modify any resource code. (Since projects will be graded using the original resource code, any modifications will likely result in project failure.)

On some occasions, we may supply some resource code in executable form, without supplying source code. We will do so by supplying an SML of New Jersey image extended with the relevant code.

Project submission

Students should submit their projects by concatenating their source code into a single file entitled project-<i>.sml, where <i> is the project number, and copying that file into /afs/andrew/course/15/501/submit/<userid>. (Exception: For Project 6, the file should be named gc.c.)

This file should not include the resource code that we supply. Also, this file should not contain diagnostic code; submissions should not print anything to console.

Commenced projects

Project 1
Equivalence checking for F-omega.
Implement Equiv : EQUIV.
[
support code]
Due February 4.

Project 2
Equivalence checking for singleton kinds.
Implement Equiv : EQUIV.
[
support code]
Due February 11.

Project 3
CPS conversion.
Implement CpsConvert : CPS_CONVERT.
[
support code, Windows heap image (8MB), Linux heap image (8MB), Mac heap image (8MB)]
Due March 6.

Project 4
Closure conversion.
Implement ClosureConvert : CLOSURE_CONVERT.
Implement Hoist : HOIST.
[
support code, Windows heap image (7MB), Linux heap image (7MB), Mac heap image (7MB)]
Due March 25.

Project 5
Phase splitting.
Implement PhaseSplit : PHASE_SPLIT.
[
support code, Windows heap image (7MB), Linux heap image (7MB), Mac heap image (7MB)]
Due April 10.

Project 6
Garbage collection.
Implement the function gc(), as described in README. Submit a file named gc.c.
[
support code, Windows heap image (7MB), Linux heap image (7MB), Mac heap image (7MB)]
Due April 24.

Project 7
Elaboration.
Implement Elaborate : ELABORATE.
[
support code, Windows heap image (7MB), Linux heap image (7MB), Mac heap image (7MB)]
Due May 13.

SML/NJ runtime binaries
Windows runtime
Linux runtime

Stress test sources
test1.sml
test2.sml
test3.sml
gctest.sml, gctest.c

Grading

Grading is based on the number of successfully completed projects. For each project, students will submit their solution by the project's due date. On the due date, the projects will be graded automatically using a variety of test cases. If a student's solution passes all tests, the project will be marked as completed. If not, no score will be recorded and the student will have the opportunity to correct his/her solution. Students will be given a second-pass due date, by which they must submit their revised solution, which will be tested in a similar fashion to his/her original submission. This process continues until the project has been completed, or the course has ended.

The final due date for all projects and project revisions is May 13.

Students are urged not to try to exploit the system by turning in "token" submissions to procrastinate a project. This places students in the unfortunate position of having to complete several earlier projects during the busiest part of their semester. Therefore, token submission will not be accepted. If, in the judgement of the instructor, any submission does not represent a credible effort, the project will be marked as failed, and no further submissions for that project will be accepted.

It is expected that most students will successfully complete all the projects and earn an A for the course.