@inproceedings{WhichTransient-Gariano2019,
    title = {Which of My Transient Type Checks Are Not (Almost) Free?},
    booktitle = {Workshop on Virtual Machines and Intermediate Languages},
    year = 2019,
    doi = "10.1145/3358504.3361232",
    url = "https://michael.homer.nz/Publications/VMIL2019/not-almost-free.pdf",
    author = {Gariano, Isaac Oscar and Roberts, Richard and Marr, Stefan and Homer, Michael and Noble, James},
    abstract = {
        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.
    }
}
