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 surprising ways.

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.


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, plus 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.


Barak Pearlmutter <bap@cs.unm.edu>