CS 591.7 / 491.1:
Advanced Programming Language Implementation
Most compilers courses cover basically what is needed to build a
medium-performance FORTRAN. Here, we will learn what is needed to
build a fast Scheme; a zippy perl; a pleasant Prolog; a trusty Java!
Whatever else Java has accomplished, it has finally brought garbage
collection into the mainstream.''
-- Gregory V. Wilson,
Dr. Dobbs Journal, 9/1997
How are objects to be represented in memory? What does the compiled
code look like? How is lambda implemented? How are
variables represented? How is a block of storage reclaimed after it
becomes inaccessible? What unique opportunities for optimization can
we take advantage of? All these decisions impact each other in
To make room for these issues, which arise only in advanced languages,
we will not cover what is covered in a standard compiler
course: lexical analysis, parsing, symbol tables, register allocation,
instruction scheduling, strength reduction, loop unrolling. Take CS
454 for that stuff.
- instructor: Professor Barak
- identifier: CS 591.007, call number 13515 / CS 491.001, call no. 19771
- time: Fall 1999, Tues/Thur, 5:30-6:45
- place: Sara Reynolds 107
- prerequisites: CS 257 (scheme),
CS 351 (large programs), and
CS 451 (comparative programming languages),
or equivalent, or permission of instructor.
Advanced undergraduates are most welcome!
This course will be based on the text Topics
in Advanced Language Implementation by Peter Lee et al,
plus supplementary materials drawn from the literature,
the excellent Garbage
Collection: Algorithms for Automatic Dynamic Memory
Management by Richard Jones and Rafael Lins, the clever Compiling
with Continuations by Andrew W. Appel, etc.
See the class references page for pointers to
actual paper and web resources.
Students will be expected to do a series of small projects throughout
the semester, a substantial final project and a presentation of a
paper from the literature. But most importantly, students will be
expected to smile while getting their fingers burnt on the secret
underbelly of our shiny programming language infrastructure.