Abstract

We present a static and dynamic semantics for an abstract machine that evaluates expressions of a polymorphic programming language. Unlike traditional semantics, our abstract machine exposes many important issues of memory management, such as value sharing and control representation. We prove the soundness of the static semantics with respect to the dynamic semantics using traditional techniques. We then show how these same techniques may be used to establish the soundness of various memory management strategies, including type-based, tag-free garbage collection; tailcall elimination; and environment strengthening. 1 Introduction Type theory and operational semantics are remarkably effective tools for programming language design and implementation [28, 13]. An important and influential example is provided by The Definition of Standard ML (SML) [28]. The static semantics of SML is specified as a collection of elaboration rules that defines the context-sensitive constraints on the forma...