CS 6983
The Technology of Lambda
Annotated Bibliography

This page collects a large set of relevant papers on the subject of compiling call-by-value functional programming languages — specifically papers relevant to the topics we'll be covering in this semester's class. Besides bibliographic citations, I've also included short descriptions of the papers, including my personal editorialising. Note that this list is idiosyncratic — the papers that I, personally, have read and which have influenced my understanding of this area. This means that there are clearly many other uncited but relevant works not represented here, due to my bounded exposure to the field.

I've made no effort to keep this list manageable. You may browse among these papers as your interests direct you. For your future reading, I've also provided the entire collection as a single tar ball

The λ Calculus

These works treat the λ calculus in general.

CPS

General manipulation and representation of lambda terms

ANF

Flow analysis (classic and higher-order)

Closure conversion

Closure conversion is the task of encoding environment structure in a higher-order language with explicit data structures --- that is, how do we create the "closures" that package up free-variable bindings at run time? How can we do it in the most lightweight way possible? This is the central task of compiling a call-by-value, higher-order functional programming language based on the λ-calculus.

Appel's book on the SML/NJ compiler (cited above) is an excellent front-to-back introduction to the task.

See the references below on defunctionalisation and monomorphisation for other excellent papers on the subject.

Monomorphisation and Defunctionalisation

These are big hammers for dealing with higher-order languages. Note that you can even do monomorphisation in dynamically typed languages like Scheme; see Siskind's work on Stalin, below.