Which of My Transient Type Checks Are Not (Almost) Free?
One form of type checking used in gradually typed language is
transient type checking: whenever an object “flows” through code
with a type annotation, the object is dynamically checked to ensure
it has the methods required by the annotation. Just-in-time
compilation and optimisation in virtual machines can eliminate much
of the overhead of run-time transient type checks. Unfortunately
this optimisation is not uniform: some type checks will
significantly decrease, or even increase, a program’s performance.
In this paper, we refine the so-called “Takikawa” protocol, and use
it to identify which type annotations have the greatest effects on
performance. In particular, we show how graphing the performance of
such benchmarks when varying which type annotations are present in
the source code can be used to discern potential patterns in
performance. We demonstrate our approach by testing the Moth virtual
machine: for many of the benchmarks where Moth’s transient type
checking impacts performance, we have been able to identify one or
two specific type annotations that are the likely cause. Without
these type annotations, the performance impact of transient type
checking becomes negligible.
Using our technique programmers can optimise programs by removing
expensive type checks, and VM engineers can identify new
opportunities for compiler optimisation.
Isaac Oscar Gariano, Richard Roberts, Stefan Marr, Michael Homer, James Noble
Workshop on Virtual Machines and Intermediate Languages (VMIL
The final copy of this publication is available from the publisher
Michael Homer — 2019