This is a curated list of meta-tracing reading material ordered by date.
There's a lot out there about meta-traing (the pypy blog contains hundreds of posts alone), so this isn't an exhaustive list. I've slimed it down using the following loose criteria:
- The article must be about meta-tracing concepts.
- It must be a technical article discussing (for example) design decisions/optimisations/performance trade-offs.
- The article isn't a tutorial for a particular system.
Articles in bold are the ones I've selected for us to read because they are likely to talk about things we've not thought about entirely. For the selected articles I've written a sentence or two about what they cover.
- PyPy Blog: Applying a tracing JIT to an interpreter
- Paper: Tracing the meta-level: PyPy's tracing JIT compiler
- PyPy Blog: A JIT for regular expression matching
- PyPy Blog: "Blackhole" interpreter -- "It's almost impossible to just "jump" at the right place in the code of the regular interpreter"
- PyPy Blog: Escape analysis in PyPy's JIT -- We will want escape analysis at some point. Also talks about virtuals
- PyPy Blog: Efficiently implementing python objects with maps -- A classic worth revisiting periodically. We will need hints to allow this optimisation at some stage
- Paper: SPUR: a trace-based JIT compiler for CIL -- I think I read this once when I started in the team. Could use a refresher
- PyPy Blog: Loop invariant code motion -- Relevant to trace looping
- PyPy Blog: Controlling tracing of an interpreter with hints (4-part series) -- Might be time to refresh what we know about hints. We will need those soon
- Paper: Runtime feedback in a meta-tracing JIT for efficient dynamic languages
- Paper: Allocation removal by partial evaluation in a tracing JIT -- Not just rehash of the earlier escape analysis blog post?
- PyPy Blog: Comparing Partial Evaluation and Tracing
- Paper: The efficient handling of guards in the design of RPython's tracing JIT -- guard efficiency always important
- Paper: Loop-aware optimizations in PyPy's tracing JIT -- Also relevant to trace looping
- PyPy Blog: PyPy memory and warmup improvements (2) - Sharing of Guards -- We will want to share guards as much as possible
- Paper: The impact of meta-tracing on VM design and implementation
- Thesis: The Essence of Meta-Tracing JIT Compilers -- A thesis I was unaware of. Might be worth reading some sections. It has a section on "trace merging"
- PyPy Blog: How to make your code go 80 times faster
- Paper: Cross-layer workload characterization of meta-tracing JIT VMs -- We've read it before, but a refresher of where the pinch points are could be useful
- PyPy Blog: Implementing a toy optimiser -- I'd like to read this again