Staged compilation with two-level type theory
The aim of staged compilation is to enable metaprogramming in a way such that we have guarantees about the well-formedness of code output, and we can also mix together object-level and meta-level code in a concise and convenient manner. In this work, we observe that two-level type theory (2LTT), a s...
Gespeichert in:
Veröffentlicht in: | Proceedings of ACM on programming languages 2022-08, Vol.6 (ICFP), p.540-569 |
---|---|
1. Verfasser: | |
Format: | Artikel |
Sprache: | eng |
Online-Zugang: | Volltext |
Tags: |
Tag hinzufügen
Keine Tags, Fügen Sie den ersten Tag hinzu!
|
Zusammenfassung: | The aim of staged compilation is to enable metaprogramming in a way such that we
have guarantees about the well-formedness of code output, and we can also mix
together object-level and meta-level code in a concise and convenient manner. In
this work, we observe that two-level type theory (2LTT), a system originally
devised for the purpose of developing synthetic homotopy theory, also serves as
a system for staged compilation with dependent types. 2LTT has numerous good
properties for this use case: it has a concise specification, well-behaved model
theory, and it supports a wide range of language features both at the object and
the meta level. First, we give an overview of 2LTT's features and applications
in staging. Then, we present a staging algorithm and prove its correctness. Our
algorithm is "staging-by-evaluation", analogously to the technique of
normalization-by-evaluation, in that staging is given by the evaluation of 2LTT
syntax in a semantic domain. The staging algorithm together with its correctness
constitutes a proof of strong conservativity of 2LLT over the object theory. To our
knowledge, this is the first description of staged compilation which supports
full dependent types and unrestricted staging for types. |
---|---|
ISSN: | 2475-1421 2475-1421 |
DOI: | 10.1145/3547641 |