Tagless Staged Interpreters for Typed Languages

Speaker: Emir Pasalic, OGI

When & Where: 12:30pm, Friday, June 14, 2002, Room 400 AKW


Multi-stage programming languages provide a convenient notation for explicitly staging programs. Staging a definitional interpreter for a domain specific language is one way of deriving an implementation that is both readable and efficient. In an untyped setting, staging an interpreter "removes a complete layer of interpretive overhead", just like partial evaluation. In a typed setting however, Hindley-Milner type systems do not allow us to exploit typing information in the language being interpreted. In practice, this can have a slowdown cost factor of three or more times.

Previously, both type specialization and tag elimination were applied to this problem. In this paper we propose an alternative approach, namely, expressing the definitional interpreter in a dependently typed programming language. We report on our experience with the issues that arose in writing such an interpreter and in designing such a language. A pedagogically rewarding aspect of writing a definitional interpreter in a dependently typed setting is that it provides a useful means for explaining the fundamental differences between interpreters in the untyped and the typed settings.

To demonstrate the soundness of combining staging and dependent types in a general sense, we formalize our language (called Meta-D) and prove its type safety. To formalize Meta-D, we extend Shao, Saha, Trifonov and Papaspyrou's λH language to a multi-level setting. Building on λH allows us to demonstrate type safety in a setting where the type language contains all the calculus of inductive constructions, but without having to repeat the work needed for establishing the soundness of that system.

Joint work with Walid Taha and Tim Sheard.