-
Notifications
You must be signed in to change notification settings - Fork 0
/
infer-conclusion.tex
58 lines (54 loc) · 2 KB
/
infer-conclusion.tex
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
\Dchapter{Conclusion}
This paper shows how to
generate recursive heterogeneous type annotations for
untyped programs that use plain data.
We use a novel algorithm to ``squash'' the observed structure
of program values into named recursive types suitable for
optional type systems,
all without the assistance of record, structure, or class
definitions.
We test this approach on thousands of lines of Clojure code,
optimizing generated annotations
for programmer comprehensibility over soundness.
In our experience, our guidelines
to automatically name, group, and reuse
types yield insightful annotations
for those with some familiarity with
the original programs,
even if the initial annotations are imprecise, incomplete,
and always require some changes to type check.
Most importantly, many of these changes will involve simply rearranging or changing parts
of existing annotations, so programmers are no longer left alone
with the daunting task of reverse-engineering such programs
completely from scratch.
%Our generated annotations
%serve as a valuable starting point for annotating untyped programs
%who rely on plain data, especially
%We indend to convey to programmers
%to understand
%
%and report on experience in using our tool to generate annotations for real-world
%Clojure programs, and enumerate the remaining changes needed to fully port
%them to Typed Clojure.
%
%Optional type systems
%were created on the observation
%that even dynamic programming languages have a
%
%We tackle the problem of
%Our approach to automatically
%generate recursive types from unrolled examples,
%has proven
%even with the challenge of
%
%% key insights
%% - recursive annotations for records and classes without declarations.
%% - how to recover the structure from class definitions
%% without programmer intervention?
%% - generalized types
%
%We have tested our approach on thousands of lines
%of Clojure code,
%Typed Clojure types for Clojure
%programs. Despite the fact that Clojure programs
%declare minimal structure, we successfully