Pycket: A Tracing JIT For a Functional Language
Spenser Bauman, Carl Friedrich Bolz, Robert Hirschfeld, Vasily Krilichev, Tobias Pape, Jeremy Siek, and Sam Tobin-Hochstadt
2015
We present Pycket, a high-performance tracing JIT compiler for
Racket. Pycket supports a wide variety of the sophisticated
features in Racket such as contracts, continuations, classes, structures,
dynamic binding, and more. On average, over a standard suite of
benchmarks, Pycket outperforms existing compilers, both Racket’s
JIT and other highly-optimizing Scheme compilers. Further, Pycket
provides much better performance for proxies than existing systems,
dramatically reducing the overhead of contracts and gradual typing.
We validate this claim with performance evaluation on multiple
existing benchmark suites.
The Pycket implementation is of independent interest as an
application of the RPython meta-tracing framework (originally created
for PyPy), which automatically generates tracing JIT compilers
from interpreters. Prior work on meta-tracing focuses on bytecode
interpreters, whereas Pycket is a high-level interpreter based on the
CEK abstract machine and operates directly on abstract syntax trees.
Pycket supports proper tail calls and first-class continuations. In the
setting of a functional language, where recursion and higher-order
functions are more prevalent than explicit loops, the most significant
performance challenge for a tracing JIT is identifying which control
flows constitute a loop -- we discuss two strategies for identifying
loops and measure their impact.
Recent comments
22 weeks 2 days ago
22 weeks 2 days ago
22 weeks 2 days ago
44 weeks 3 days ago
48 weeks 5 days ago
50 weeks 2 days ago
50 weeks 2 days ago
1 year 6 days ago
1 year 5 weeks ago
1 year 5 weeks ago