The impact of meta-tracing on VM design and implementation

Most modern languages are implemented using Virtual Machines (VMs). While the best VMs use Just-In-Time (JIT) compilers to achieve good performance, JITs are costly to implement, and few VMs therefore come with one. The RPython language allows tracing JIT VMs to be automatically created from an interpreter, changing the economics of VM implementation. In this paper, we explain, through two concrete VMs, how meta-tracing RPython VMs can be designed and optimised, and, experimentally, the performance levels one might reasonably expect from them.

[1]  Michael Leuschel,et al.  Towards a jitting VM for prolog execution , 2010, PPDP.

[2]  Davide Ancona,et al.  RPython: a step towards reconciling dynamically and statically typed OO languages , 2007, DLS '07.

[3]  Gilad Bracha,et al.  Mirrors: design principles for meta-level facilities of object-oriented programming languages , 2004, OOPSLA.

[4]  Laurence Tratt,et al.  Experiences with an icon-like expression evaluation system , 2010, DLS '10.

[5]  Cliff Click,et al.  The Java HotSpot Server Compiler , 2001, Java Virtual Machine Research and Technology Symposium.

[6]  John Maloney,et al.  Back to the Future The Story of Squeak, A Practical Smalltalk Written in Itself , 1997 .

[7]  Carl Friedrich Bolz,et al.  Tracing the meta-level: PyPy's tracing JIT compiler , 2009, ICOOOLPS@ECOOP.

[8]  Laurence Tratt,et al.  Dynamically Typed Languages , 2009, Adv. Comput..

[9]  Kenneth R. Anderson,et al.  Performing Lisp analysis of the FANNKUCH benchmark , 1994, LIPO.

[10]  Cliff Click,et al.  The java hotspot TM server compiler , 2001 .

[11]  Laurence Tratt,et al.  Compile-time meta-programming in a dynamically typed OO language , 2005, DLS '05.

[12]  Michael Leuschel,et al.  Runtime feedback in a meta-tracing JIT for efficient dynamic languages , 2011, ICOOOLPS@ECOOP.

[13]  Manuel Serrano,et al.  Compiling scheme to JVM bytecode:: a performance study , 2002, ICFP '02.

[14]  Craig Chambers,et al.  An efficient implementation of SELF, a dynamically-typed object-oriented language based on prototypes , 1991 .

[15]  R. P. Weicker Dhrystone benchmark (Ada version 2): rationale and measurements rules , 1989, ALET.

[16]  David Robson,et al.  Smalltalk-80: The Language and Its Implementation , 1983 .

[17]  Michael Leuschel,et al.  Allocation removal by partial evaluation in a tracing JIT , 2011, PEPM '11.

[18]  Nikolai Tillmann,et al.  SPUR: a trace-based JIT compiler for CIL , 2010, OOPSLA.

[19]  John R. Rose Bytecodes meet combinators: invokedynamic on the JVM , 2009, VMIL '09.

[20]  Samuele Pedroni,et al.  PyPy's approach to virtual machine construction , 2006, OOPSLA '06.

[21]  Jonathan Rees,et al.  A tractable Scheme implementation , 1994, LISP Symb. Comput..

[22]  L. Peter Deutsch,et al.  Efficient implementation of the smalltalk-80 system , 1984, POPL.

[23]  David A. Moon,et al.  A monotonic superclass linearization for Dylan , 1996, OOPSLA '96.

[24]  Ole Agesen,et al.  Towards a Universal Implementation Substrate for Object-Oriented Languages , 1996 .

[25]  Vasanth Bala,et al.  Dynamo: a transparent dynamic optimization system , 2000, SIGP.

[26]  Michael Franz,et al.  HotpathVM: an effective JIT compiler for resource-constrained devices , 2006, VEE '06.