Abstract. We introduce MetaML, a practically-motivated, staticallytyped multi-stage programming language. MetaML is a real" language. We h a v e built an implementation and used it to solve m ulti-stage problems. MetaML allows the programmer to construct, combine, and execute code fragments in a type-safe manner. Code fragments can contain free variables, but they obey the static-scoping principle. MetaML performs typechecking for all stages once and for all before the execution of the rst stage. Certain anomalies with our rst MetaML implementation led us to formalize an illustrative subset of the MetaML implementation. We present both a big-step semantics and type system for this subset, and prove the type system's soundness with respect to a big-step semantics. From a software engineering point of view, this means that generators written in the MetaML subset never generate unsafe programs. A type system and semantics for full MetaML is still ongoing work. We argue that multi-stage languages are useful as programming languages in their own right, that they supply a sound basis for high-level program generation technology, and that they should support features that make it possible for programmers to write staged computations without signi cantly changing their normal programming style. To illustrate this we provide a simple three stage example elaborating a number of practical issues. The design of MetaML was based on two main principles that we identi ed as fundamental for high-level program generation, namely, crossstage persistence and cross-stage safety. W e present these principles, explain the technical problems they give rise to, and how w e address with these problems in our implementation.
MetaML is a statically typed programming language that supports program manipulation REF .
MetaML and Multi-Stage Programming with Explicit Annotations
Theoretical Computer Science
Computer Science