Abstract:
One of the major benefits of statically-typed programming languages is that they significantly improve programmer productivity. An obvious reason for this is that they dramatically reduce the amount of time spent debugging by catching most common errors at compile time. A perhaps more important reason is that programmers can use the types to guide understanding of the structure of a piece of code, both during the development of the code, and during code maintenance. One proposal for increasing these benefits is to extend an existing statically-typed language so that each ordinary type is refined by a number of refinement-types, which allow many common program invariants to be expressed and checked. In the resulting system a part of a program which is assigned a particular type may also be assigned multiple refinements of that type. Previous work indicates that automatically inferring refinement-types is algorithmically impractical in general. However, if a programmer annotates their program with enough of the intended refinement-types the problem of checking the annotated program has been found to be much easier in some preliminary experiments. The goal of this work is to demonstrate that refinement-type checking can be a practical and useful addition to a real programming language. To achieve this I intend to design an extension of Standard ML which is suitable for refinement-type checking, extend a real compiler with an efficient refinement-type checker, and demonstrate that this allows many common program invariants to be captured in a practical way. 1
Citations
|
393
|
A syntactic approach to type soundness
– Wright, Felleisen
- 1994
|
|
196
|
Type inclusion constraints and type inference
– Aiken, Wimmers
- 1993
|
|
182
|
Logic programming in the LF logical framework
– Pfenning
- 1991
|
|
177
|
Soft typing with conditional types
– Aiken, Wimmers, et al.
- 1994
|
|
166
|
The Modula-3 type system
– Cardelli, Donahue, et al.
- 1989
|
|
141
|
Eliminating Array Bound Checking Through Dependent Types
– Xi, Pfenning
- 1998
|
|
134
|
Soft typing
– Cartwright, Fagan
- 1991
|
|
133
|
The essence of Algol
– Reynolds
- 1981
|
|
127
|
Refinement types for ML
– Freeman, Pfenning
- 1991
|
|
104
|
Preliminary design of the programming language Forsythe
– Reynolds
- 1988
|
|
76
|
Towards a theory of types in Prolog
– Mishra
- 1984
|
|
72
|
Solving systems of set constraints
– Aiken, Wimmers
- 1992
|
|
61
|
Automatic Computation of Data Set Definitions
– Reynolds
- 1969
|
|
52
|
Deciding equivalence of finite tree automata
– Seidl
- 1990
|
|
45
|
A regular type language for logic programs
– Dart, Zobel
- 1992
|
|
45
|
Set based analysis of ML programs
– Heintze
- 1994
|
|
44
|
Implementing regular tree expressions
– Aiken, Murphy
- 1991
|
|
42
|
Signatures for a network protocol stack: A systems application of Standard ML
– Biagioni, Harper, et al.
- 1994
|
|
42
|
Functional characters of solvable terms. Zeitschrift für Mathematische Logik und Grundlagen der Mathematik
– Coppo, Dezani-Ciancaglini, et al.
- 1981
|
|
42
|
Coercion and type inference (summary
– Mitchell
- 1984
|
|
41
|
Refinement types for logical frameworks
– Pfenning
- 1993
|
|
31
|
Program analysis using mixed term and set constraints
– Fahndrich, Aiken
- 1997
|
|
31
|
Intersection Types and Bounded Polymorphism
– Pierce
- 1997
|
|
24
|
The Coherence of Languages with Intersection Types
– Reynolds
- 1991
|
|
19
|
An Oxford survey of order sorted algebra
– Diaconescu, Goguen
- 1994
|
|
11
|
A practical refinement-type checker for Standard ML
– Davies
- 1997
|
|
2
|
Some decision problems for ML refinement types
– Skalka
- 1997
|
|
1
|
Practical refinement-type checking. Unpublished draft available from http://www.cs.cmu.edu/~rowan
– Davies, Pfenning
- 1997
|
|
1
|
union and intersection types
– Singleton
- 1994
|
|
1
|
A schema for adding dependent types to ML. Unpublished draft available from http://www.cs.cmu.edu/~fp
– Xi, Pfenning
- 1997
|