Sound, Heuristic Type Annotation Inference for Ruby Milod Kazerounian Brianna M. Ren Jeffrey S. Foster University of Maryland University of Maryland Tufts University College Park, Maryland, USA College Park, Maryland, USA Medford, MA, USA
[email protected] [email protected] [email protected] Abstract Keywords: type inference, dynamic languages, Ruby Many researchers have explored retrofitting static type sys- ACM Reference Format: tems to dynamic languages. This raises the question of how Milod Kazerounian, Brianna M. Ren, and Jeffrey S. Foster. 2020. to add type annotations to code that was previously untyped. Sound, Heuristic Type Annotation Inference for Ruby. In Proceed- One obvious solution is type inference. However, in com- ings of the 16th ACM SIGPLAN International Symposium on Dynamic plex type systems, in particular those with structural types, Languages (DLS ’20), November 17, 2020, Virtual, USA. ACM, New type inference typically produces most general types that York, NY, USA, 14 pages. https://doi.org/10.1145/3426422.3426985 are large, hard to understand, and unnatural for program- mers. To solve this problem, we introduce InferDL, a novel Ruby type inference system that infers sound and useful type 1 Introduction annotations by incorporating heuristics that guess types. Many researchers have explored ways to add static types to For example, we might heuristically guess that a parame- dynamic languages [3, 4, 15, 19, 29, 31, 36, 37], to help pro- ter whose name ends in count is an integer. InferDL works grammers find and prevent type errors. One key challenge by first running standard type inference and then applying in using such retrofitted type systems is finding type anno- heuristics to any positions for which standard type infer- tations for code that was previously untyped.