log in  |  register  |  feedback?  |  help  |  web accessibility
Logo
Practical Partial Evaluation for High-Performance Dynamic Language Runtimes
Benjamin Quiring - UMD
Monday, November 8, 2021, 11:30 am-12:30 pm Calendar
  • You are subscribed to this talk through .
  • You are watching this talk through .
  • You are subscribed to this talk. (unsubscribe, watch)
  • You are watching this talk. (unwatch, subscribe)
  • You are not subscribed to this talk. (watch, subscribe)
Abstract

Most high-performance dynamic language virtual machines
duplicate language semantics in the interpreter, compiler,
and runtime system. This violates the principle to not repeat
yourself. In contrast, we define languages solely by writing
an interpreter. The interpreter performs specializations, e.g.,
augments the interpreted program with type information and
profiling information. Compiled code is derived automati-
cally using partial evaluation while incorporating these spe-
cializations. This makes partial evaluation practical in the
context of dynamic languages: It reduces the size of the
compiled code while still compiling all parts of an operation
that are relevant for a particular program. When a specula-
tion fails, execution transfers back to the interpreter, the pro-
gram re-specializes in the interpreter, and later partial eval-
uation again transforms the new state of the interpreter to
compiled code. We evaluate our approach by comparing our
implementations of JavaScript, Ruby, and R with best-in-
class specialized production implementations. Our general-
purpose compilation system is competitive with production
systems even when they have been heavily optimized for the
one language they support. For our set of benchmarks, our
speedup relative to the V8 JavaScript VM is 0.83x, relative
to JRuby is 3.8x, and relative to GNU R is 5x.

This talk is organized by Deena Postol