Peter Sestoft

Learn More
We derive a simple abstract machine for lazy evaluation of the lambda calculus, starting from Launchbury's natural semantics. Lazy evaluation here means non-strict evaluation with sharing of argument evaluation, that is, call-by-need. The machine we derive is a lazy version of Krivine's abstract machine, which was originally designed for call-by-name(More)
The present paper is an extended abstract of (Jones 1985), in which a running , non-trivial partial evaluator is described . As far as we know, this partia l evaluator is the first which has been used in practice to transform interpreters into corresponding stand-alone compilers, or to generate a compile r generator by transforming itself . A partial(More)
2 Values and their Representation integer 32 bits, untagged. Unboxed (i.e., not region allocated). One bit is used for tagging when GC is enabled. real 64 bits, untagged. Boxed (i.e., allocated in region) string Unbounded size. Allocated in region. bool one 32-bit word. Unboxed. α list nil and :: cells unboxed (i.e., not region allocated). Auxiliary pairs(More)
Modern bytecode execution environments with optimizing just-in-time compilers, such as Sun’s Hotspot Java Virtual Machine, IBM’s Java Virtual Machine, and Microsoft’s Common Language Runtime, provide an infrastructure for generating fast code at runtime. Such runtime code generation can be used for efficient implementation of parametrized algorithms. More(More)