Title
A domain-specific language for building self-optimizing AST interpreters
Abstract
Self-optimizing AST interpreters dynamically adapt to the provided input for faster execution. This adaptation includes initial tests of the input, changes to AST nodes, and insertion of guards that ensure assumptions still hold. Such specialization and speculation is essential for the performance of dynamic programming languages such as JavaScript. In traditional procedural and objectoriented programming languages it can be tedious to write selfoptimizing AST interpreters, as those languages fail to provide constructs that would specifically support that. This paper introduces a declarative domain-specific language (DSL) that greatly simplifies writing self-optimizing AST interpreters. The DSL supports specialization of operations based on types of the input and other properties. It can then use these specializations directly or chain them to represent the operation with the minimum amount of code possible. The DSL significantly reduces the complexity of expressing specializations for those interpreters. We use it in our high-performance implementation of JavaScript, where 274 language operations have an average of about 4 and a maximum of 190 specializations. In addition, the DSL is used in implementations of Ruby, Python, R, and Smalltalk.
Year
DOI
Venue
2014
10.1145/2658761.2658776
GPCE
Keywords
Field
DocType
algorithms,domain-specific languages,processors,java,languages,dynamic languages,language implementation,performance,self-optimizing programs,domain specific languages
Domain-specific language,Programming language,Computer science,Digital subscriber line,Smalltalk,Compiled language,Theoretical computer science,Implementation,Interpreter,Python (programming language),JavaScript
Conference
Volume
Issue
ISSN
50
3
0362-1340
Citations 
PageRank 
References 
11
0.52
17
Authors
5
Name
Order
Citations
PageRank
Christian Humer11043.97
Christian Wimmer21127.03
Christian Wirth3766.67
Andreas Wöß41435.55
Thomas Würthinger539625.63