15-417 HOT Compilation Spring 2013
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
| May 3 |
The support code for the final project has been updated.
|
| May 2 |
The final due date for all projects and project revisions is May 14.
|
| May 2 |
The final project has been issued.
It is due May 14.
|
| Apr 12 |
The sixth project has been issued.
It is due April 26.
|
| April 2 |
The fifth project has been issued.
It is due April 16.
|
| Mar 13 |
The fourth project has been issued.
It is due April 1.
|
| Mar 13 |
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 21 |
The third project has been issued.
It is due March 7.
|
| Feb 6 |
The second project has been issued.
It is due February 14.
|
| Jan 29 |
The support code for project 1 has been reissued with
substitution implemented correctly.
|
| Jan 22 |
The first project has been issued.
It is due January 29.
|
Topics
| Jan 15 |
Binding |
| Jan 17 |
F-omega |
| Jan 22 |
Typechecking for F-omega |
| Jan 29 |
Singleton kinds |
| Feb 5 |
Typechecking for singleton kinds |
| Feb 7 |
Type-directed translation |
| Feb 12 |
CPS conversion |
| Feb 21 |
Closure conversion |
| Feb 28 |
Allocation |
| Mar 5 |
Module type theory |
| Mar 21 |
Phase splitting |
| Apr 2 |
Garbage collection |
| Apr 9 |
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 January 29.
Project 2
Equivalence checking for singleton kinds.
Implement Equiv : EQUIV.
[support code]
Due February 14.
Project 3
CPS conversion.
Implement CpsConvert : CPS_CONVERT.
[support code, Windows heap image (8MB), Linux heap image (8MB), Mac heap image (8MB)]
Due March 7.
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 April 1.
Project 5
Phase splitting.
Implement PhaseSplit : PHASE_SPLIT.
[support code, Windows heap image (7MB), Linux heap image (7MB), Mac heap image (7MB)]
Due April 16.
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 26.
Project 7
Elaboration.
Implement Elaborate : ELABORATE.
[support code, Windows heap image (7MB), Linux heap image (7MB), Mac heap image (7MB)]
Due May 14.
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 14.
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.
|