Efficiently computing static single assignment form and the control dependence graph
ACM Transactions on Programming Languages and Systems (TOPLAS)
Lua—an extensible extension language
Software—Practice & Experience
Dynamo: a transparent dynamic optimization system
PLDI '00 Proceedings of the ACM SIGPLAN 2000 conference on Programming language design and implementation
Dynamic native optimization of interpreters
Proceedings of the 2003 workshop on Interpreters, virtual machines and emulators
Intel Virtualization Technology
Computer
HotpathVM: an effective JIT compiler for resource-constrained devices
Proceedings of the 2nd international conference on Virtual execution environments
Tracing for web 3.0: trace compilation for the next generation web applications
Proceedings of the 2009 ACM SIGPLAN/SIGOPS international conference on Virtual execution environments
Trace-based just-in-time type specialization for dynamic languages
Proceedings of the 2009 ACM SIGPLAN conference on Programming language design and implementation
Tracing the meta-level: PyPy's tracing JIT compiler
Proceedings of the 4th workshop on the Implementation, Compilation, Optimization of Object-Oriented Languages and Programming Systems
Lua (programming language)
SPUR: a trace-based JIT compiler for CIL
Proceedings of the ACM international conference on Object oriented programming systems languages and applications
Efficient interpretation using quickening
Proceedings of the 6th symposium on Dynamic languages
HappyJIT: a tracing JIT compiler for PHP
Proceedings of the 7th symposium on Dynamic languages
Runtime feedback in a meta-tracing JIT for efficient dynamic languages
Proceedings of the 6th Workshop on Implementation, Compilation, Optimization of Object-Oriented Languages, Programs and Systems
Swift: a register-based JIT compiler for embedded JVMs
VEE '12 Proceedings of the 8th ACM SIGPLAN/SIGOPS conference on Virtual Execution Environments
VEE '12 Proceedings of the 8th ACM SIGPLAN/SIGOPS conference on Virtual Execution Environments
A trace-based Java JIT compiler retrofitted from a method-based compiler
CGO '11 Proceedings of the 9th Annual IEEE/ACM International Symposium on Code Generation and Optimization
Practical automatic loop specialization
Proceedings of the eighteenth international conference on Architectural support for programming languages and operating systems
Efficient interpreter optimizations for the JVM
Proceedings of the 2013 International Conference on Principles and Practices of Programming on the Java Platform: Virtual Machines, Languages, and Tools
Whalesong: running racket in the browser
Proceedings of the 9th symposium on Dynamic languages
Efficient hosted interpreters on the JVM
ACM Transactions on Architecture and Code Optimization (TACO)
Characteristics of dynamic JVM languages
Proceedings of the 7th ACM workshop on Virtual machines and intermediate languages
Unipycation: a case study in cross-language tracing
Proceedings of the 7th ACM workshop on Virtual machines and intermediate languages
Hi-index | 0.00 |
Creating an interpreter is a simple and fast way to implement a dynamic programming language. With this ease also come major drawbacks. Interpreters are significantly slower than compiled machine code because they have a high dispatch overhead and cannot perform optimizations. To overcome these limitations, interpreters are commonly combined with just-in-time compilers to improve the overall performance. However, this means that a just-in-time compiler has to be implemented for each language. We explore the approach of taking an interpreter of a dynamic language and running it on top of an optimizing trace-based virtual machine, i.e., we run a guest VM on top of a host VM. The host VM uses trace recording to observe the guest VM executing the application program. Each recorded trace represents a sequence of guest VM bytecodes corresponding to a given execution path through the application program. The host VM optimizes and compiles these traces to machine code, thus eliminating the need for a custom just-in-time compiler for the guest VM. The guest VM only needs to provide basic information about its interpreter loop to the host VM.