The Ins and Outs of Gradual Type Inference
Aseem Rastogi,
Avik Chaudhuri, and
Basil Hosmer
Abstract
Gradual typing lets programmers evolve their dynamically typed
programs by gradually adding explicit type annotations, which confer benefits like improved performance and fewer run-time failures.
However, we argue that such evolution often requires a giant
leap, and that type inference can offer a crucial missing step. If
omitted type annotations are interpreted as unknown types, rather
than the dynamic type, then static types can often be inferred,
thereby removing unnecessary assumptions of the dynamic type.
The remaining assumptions of the dynamic type may then be removed by either reasoning outside the static type system, or restructuring the code.
We present a type inference algorithm that can improve the performance of existing gradually typed programs without introducing
any new run-time failures. To account for dynamic typing, types
that flow in to an unknown type are treated in a fundamentally different manner than types that flow out. Furthermore, in the interests
of backward-compatibility, an escape analysis is conducted to decide which types are safe to infer. We have implemented our algorithm for ActionScript, and evaluated it on the SunSpider and V8
benchmark suites. We demonstrate that our algorithm can improve
the performance of unannotated programs as well as recover most
of the type annotations in annotated programs.
PDF
BibTeX
@inproceedings{iogti-RCH12,
author = {Aseem Rastogi and Avik Chaudhuri and Basil Hosmer},
title = {The Ins and Outs of Gradual Type Inference},
booktitle = {Proceedings of the 39th ACM Symposium on
Principles of Programming Languages (POPL'12)},
year = {2012},
pages = {481--494},
publisher = {ACM}
}