A Lambda-Revelation of the SECD Machine
Olivier Danvy December 2003 |
Abstract:
We present a simple inter-derivation between
lambda-interpreters, i.e., evaluation functions for lambda-terms, and
abstract reduction machines for the lambda-calculus, i.e., transition
functions. The two key derivation steps are the CPS transformation and
Reynolds's defunctionalization. By transforming the interpreter into
continuation-passing style (CPS), its flow of control is made manifest as a
continuation. By defunctionalizing this continuation, the flow of control is
materialized as a first-order data structure.
The derivation applies not merely to connect independently known lambda-interpreters and abstract machines, it also applies to construct the abstract machine corresponding to a lambda-interpreter and to construct the lambda-interpreter corresponding to an abstract machine. In this article, we treat in detail the canonical example of Landin's SECD machine and we reveal its denotational content: the meaning of an expression is a partial endo-function from a stack of intermediate results and an environment to a new stack of intermediate results and an environment. The corresponding lambda-interpreter is unconventional because (1) it uses a control delimiter to evaluate the body of each lambda-abstraction and (2) it assumes the environment to be managed in a callee-save fashion instead of in the usual caller-save fashion Available as PostScript, PDF, DVI. Superseeded by the BRICS report RS-03-33 |