Skip to content

Casts and costs: harmonizing safety and performance in gradual typing by John Peter Campora, Sheng Chen, Eric Walkingshaw, ICFP 2018 #14

@programLyrique

Description

@programLyrique

Casts and costs: harmonizing safety and performance in gradual typing

John Peter Campora, Sheng Chen, Eric Walkingshaw

ICFP 2018

PDF

Abstract

Gradual typing allows programmers to use both static and dynamic typing in a single program. However, a well-known problem with sound gradual typing is that the interactions between static and dynamic code can cause significant performance degradation. These performance pitfalls are hard to predict and resolve, and discourage users from using gradual typing features. For example, when migrating to a more statically typed program, often adding a type annotation will trigger a slowdown that can be resolved by adding more annotations elsewhere, but since it is not clear where the additional annotations must be added, the easier solution is to simply remove the annotation. To address these problems, we develop: (1) a static cost semantics that accurately predicts the overhead of static-dynamic interactions in a gradually typed program, (2) a technique for efficiently inferring such costs for all combinations of inferrable type assignments in a program, and (3) a method for translating the results of this analysis into specific recommendations and explanations that can help programmers understand, debug, and optimize the performance of gradually typed programs. We have implemented our approach in Herder, a tool for statically analyzing the performance of different typing configurations for Reticulated Python programs. An evaluation on 15 Python programs shows that Herder can use this analysis to accurately and efficiently recommend type assignments that optimize the performance of these programs without sacrificing the safety guarantees provided by static typing.

Why are you interested in it or why should it be a good idea?

The article explains how to insert type casts for gradual typing and minimize the number of them while minimizing some costs (such as the costs of checking the types) and preserving correctness.

Metadata

Metadata

Labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions