BRICS Report Series · 2003 · 132 citations · 20 references
ComputingComputer ScienceProgramming LanguagesSemanticsSyntaxFunctional ProgrammingRecursion TheoryType SystemsAbstract MachinesClosure ConversionContinuation-passing StyleDefunctionalizationDenotational ModelsLambda CalculusLambda Calculus Semantics
We bridge the gap between functional evaluators and abstract machines for the lambda-calculus, using closure conversion, transformation into continuation-passing style, and defunctionalization of continuations.<br /> <br />We illustrate this bridge by deriving Krivine's abstract machine from an ordinary call-by-name evaluator and by deriving an ordinary call-by-value evaluator from Felleisen et al.'s CEK machine. The first derivation is strikingly simpler than what can be found in the literature. The second one is new. Together, they show that Krivine's abstract machine and the CEK machine correspond to the call-by-name and call-by-value facets of an ordinary evaluator for the lambda-calculus.<br /> <br /> We then reveal the denotational content of Hannan and Miller's CLS machine and of Landin's SECD machine. We formally compare the corresponding evaluators and we illustrate some relative degrees of freedom in the design spaces of evaluators and of abstract machines for the lambda-calculus with computational effects.<br /> <br />For the purpose of this work, we distinguish between virtual machines, which have an instruction set, and abstract machines, which do not. The Categorical Abstract Machine, for example, has an instruction set, but Krivine's machine, the CEK machine, the CLS machine, and the SECD machine do not; they directly operate on lambda-terms instead. We present the abstract machine that corresponds to the Categorical Abstract Machine.
20
Notions of computation and monads
Eugenio Moggi · Information and Computation · 1991 · 1.7K citations
The Mechanical Evaluation of Expressions
P. J. Landin · The Computer Journal · 1964 · 932 citations · Full text
Definitional interpreters for higher-order programming languages
John Reynolds · 1972 · 668 citations