Given a tower of interpreters, i.e., a sequence of multiple interpreters interpreting one another as input programs, we aim to collapse this tower into a compiler that removes all interpretive overhead and runs in a single pass. In the real world, a use case might be Python code executed by an x86 runtime, on a CPU emulated in a JavaScript VM, running on an ARM CPU. Collapsing such a tower can not only exponentially improve runtime performance, but also enable the use of base-language tools for interpreted programs, e.g., for analysis and verification. In this paper, we lay the foundations in an idealized but realistic setting. We present a multi-level lambda calculus that features staging constructs and stage polymorphism: based on runtim...
Scripting languages are easy to use and very popular in various contexts. Their simplicity reduces a...
Abstract. A partial evaluator, given a program and a known “static” part of its input data, outputs ...
Abstract. Higher-order programming languages (i.e., languages in which procedures or labels can occu...
Dependent types and multi-stage programming have both been used, separately, in programming language...
Interpreters and compilers are two different ways of implementing programming languages. An interpre...
Constructing self-referential systems, such as Brian Smith's 3-Lisp language, is actually more str...
Abstract. In this paper, we compose six different Python and Prolog VMs into 4 pairwise compositions...
The paper reports on extensions to the MAX system enabling the generation and refinement of interpre...
Procedurally reflective programming languages enable user programs to semantically extend the langua...
Interpreters have a bad reputation for having lower perfor-mance than just-in-time compilers. We pre...
We present a program interpretation technique relying on an higher order abstract syntax which allow...
Symbolic execution is being successfully used to automat-ically test statically compiled code [4, 7,...
AbstractProgramming language semantics based on pure rewrite rules suffers from the gap between the ...
We present a complete set of staging transformations for translating a class of interpreters into co...
Scripting languages are easy to use and very popular in various contexts. Their simplicity reduces a...
Scripting languages are easy to use and very popular in various contexts. Their simplicity reduces a...
Abstract. A partial evaluator, given a program and a known “static” part of its input data, outputs ...
Abstract. Higher-order programming languages (i.e., languages in which procedures or labels can occu...
Dependent types and multi-stage programming have both been used, separately, in programming language...
Interpreters and compilers are two different ways of implementing programming languages. An interpre...
Constructing self-referential systems, such as Brian Smith's 3-Lisp language, is actually more str...
Abstract. In this paper, we compose six different Python and Prolog VMs into 4 pairwise compositions...
The paper reports on extensions to the MAX system enabling the generation and refinement of interpre...
Procedurally reflective programming languages enable user programs to semantically extend the langua...
Interpreters have a bad reputation for having lower perfor-mance than just-in-time compilers. We pre...
We present a program interpretation technique relying on an higher order abstract syntax which allow...
Symbolic execution is being successfully used to automat-ically test statically compiled code [4, 7,...
AbstractProgramming language semantics based on pure rewrite rules suffers from the gap between the ...
We present a complete set of staging transformations for translating a class of interpreters into co...
Scripting languages are easy to use and very popular in various contexts. Their simplicity reduces a...
Scripting languages are easy to use and very popular in various contexts. Their simplicity reduces a...
Abstract. A partial evaluator, given a program and a known “static” part of its input data, outputs ...
Abstract. Higher-order programming languages (i.e., languages in which procedures or labels can occu...