🤖 AI Summary
This work addresses the performance degradation that can arise from haphazardly adding type annotations in gradually typed languages, a problem exacerbated by existing optimization techniques that incur substantial compilation overhead and limited practicality. To overcome these limitations, the paper proposes a lightweight, amortized strategy for selecting type annotations: leveraging data-flow analysis to prioritize high-value annotations generated by an external type inference engine, thereby minimizing costly cross-boundary coercions at runtime. Implemented in Reticulated Python, the approach achieves execution performance comparable to state-of-the-art methods across multiple benchmarks while significantly reducing and stabilizing compilation time, effectively balancing efficiency with practical usability.
📝 Abstract
Gradual typing has gained popularity as a design choice for integrating static and dynamic typing within a single language. Several practical languages have adopted gradual typing to offer programmers the flexibility to annotate their programs as needed. Meanwhile there is a key challenge of unexpected performance degradation in partially typed programs. The execution speed may significantly decrease when simply adding more type annotations. Prior studies have investigated strategies of selectively adding type annotations for better performance. However, they are restricted in substantial compilation time, which impedes the practical usage. This paper presents a new technique to select a subset of type annotations derived by type inference for improving the execution performance of gradually typed programs. The advantage of the proposal is shorter compilation time by employing a lightweight, amortized approach. It selects type annotations along the data flows, which is expected to avoid expensive runtime casts caused by a value repeatedly crossing the boundaries between untyped and typed code. We demonstrate the applicability of our proposal, and conduct experiments to validate its effectiveness of improving the execution time on Reticulated Python. Our implementation supports a Python subset to select type annotations derived by an implemented, external type inference engine. Experiment results show that our proposal outperforms a naive strategy of using all type annotations derived by type inference among the benchmark programs. In comparison with an existing approach, the proposal achieves comparable execution speed and shows advantage of maintaining a more stable compilation time of deriving and selecting type annotations. Our results empirically indicate that the proposed technique is practical within Reticulated Python for mitigating the performance bottleneck of gradually typed programs.