Linear type systems permit programmers to deallocate or explicitly recycle memory, but they are severly restricted by the fact that they admit no aliasing. This paper describes a pseudo-linear type system that allows a degree of aliasing and memory reuse as well as the ability to define complex recursive data structures. Our type system can encode conventional linear data structures such as linear lists and trees as well as more sophisticated data structures including cyclic and doubly-linked lists and trees. In the latter cases, our type system is expressive enough to represent pointer aliasing and yet safely permit destructive operations such as object deallocation. We demonstrate the flexibility of our type system by encoding two common compiler optimizations: destination-passing style and Deutsch-Schorr-Waite or "link-reversal" traversal algorithms.
|
500
|
From System F to Typed Assembly Language
– Morrisett, Walker, et al.
|
|
415
|
A syntactic approach to type soundness
– Wright, Felleisen
- 1994
|
|
339
|
Parametric shape analysis via 3-valued logic
– Sagiv, Reps, et al.
- 2002
|
|
253
|
Solving shape-analysis problems in languages with destructive updating
– Sagiv, Reps, et al.
- 1998
|
|
250
|
Functional programming with bananas, lenses, envelopes and barbed wire
– Meijer, Fokkinga, et al.
- 1991
|
|
247
|
Computational interpretations of linear logic
– Abramsky
- 1990
|
|
221
|
The design and implementation of a certifying compiler
– Necula
- 1998
|
|
221
|
Dependent types in practical programming
– Xi, Pfenning
- 1999
|
|
187
|
Interprocedural may-alias analysis for pointers: Beyond k-limiting
– Deutsch
- 1994
|
|
168
|
Typed memory management in a calculus of capabilities
– Crary, Walker, et al.
- 1999
|
|
157
|
Simple type-theoretic foundations for objectoriented programming
– Pierce, Turner
- 1994
|
|
154
|
Is it a tree, a DAG, or a cyclic graph? A shape analysis for heap-directed pointers
– Ghiya, Hendren
- 1996
|
|
150
|
Detecting Conflicts Between Structure Access
– Larus, Hilfinger
- 1988
|
|
143
|
Alias types
– Smith, Walker, et al.
- 2000
|
|
140
|
Typed closure conversion
– Minamide, Morrisett, et al.
- 1996
|
|
124
|
Stack-based typed assembly language
– Morrisett, Crary, et al.
- 1998
|
|
117
|
Syntactic control of interference
– Reynolds
- 1978
|
|
112
|
as an assertion language for mutable data structures
– BI
- 2001
|
|
109
|
Graph types
– Klarlund, Schwartzbach
- 1993
|
|
102
|
Linear types can change the world
– Wadler
- 1990
|
|
96
|
types can change the world
– Linear
- 1990
|
|
95
|
Intuitionistic reasoning about shared mutable data structure
– Reynolds
- 2001
|
|
83
|
Better static memory management: Improving region-based analysis of higher-order languages
– Aiken, Fahndrich, et al.
- 1995
|
|
82
|
The linear abstract machine
– Lafont
- 1988
|
|
81
|
Once upon a type
– Turner, Wadler, et al.
- 1995
|
|
80
|
From Region Inference to von Neumann Machines via Region Representation Inference
– Birkedal, Tofte, et al.
- 1996
|
|
68
|
Single-threaded polymorphic lambda calculus
– Guzm'an, Hudak
- 1990
|
|
65
|
Conventional and Uniqueness Typing in Graph Rewrite Systems
– Barendsen, Smetsers
- 1996
|
|
62
|
An efficient machine-independent procedure for garbage collection in various list structures
– Schorr, Waite
- 1967
|
|
56
|
Some techniques for proving correctness of programs which alter data structures
– Burstall
- 1972
|
|
52
|
A simplified account of polymorphic references
– Harper
- 1994
|
|
51
|
Quasi-linear types
– Kobayashi
- 1999
|
|
49
|
Implementation of the typed call-by-value -calculus using a stack of regions
– Tofte, Talpin
- 1994
|
|
44
|
Implementation of the typed call-by-value λ-calculus using a stack of regions
– Tofte, Talpin
- 1994
|
|
35
|
Restructuring Symbolic Programs for Concurrent Execution on Multiprocessors
– Larus
- 1989
|
|
33
|
Beyond continuations
– Felleisen, Friedman, et al.
- 1987
|
|
27
|
Ref-erence counting as a computational interpretation of linear logic
– Chirimar, Gunter, et al.
|
|
26
|
Strongly typed flow-directed representation transformations
– Dimock, Muller, et al.
|
|
17
|
Listlessness is better than laziness
– Wadler
- 1984
|
|
16
|
Towards pointer algebra
– Möller
- 1993
|
|
15
|
Mooly Sagiv. A decidable logic for describing linked data structures
– Benedikt, Reps
- 1999
|
|
15
|
An assertion language for data structures
– Cook, Oppen
- 1975
|
|
11
|
Detecting con between structure accesses
– Larus, Hil
- 1988
|
|
10
|
A functional represention of data structures with a hole
– Minamide
- 1998
|
|
10
|
Abramsky. Computational interpretations of linear logic. Theoretical Computer Science
– Samson
- 1993
|
|
10
|
From System F to Typed Assembly Language. ACM Transactions on Programming Languages and Systems
– Morrisett, Walker, et al.
- 1999
|
|
7
|
Typed Memory Management
– Walker
- 2001
|
|
6
|
Scalable certification of native code: Experience from compiling to TALx86
– Grossman, Morrisett
- 2000
|
|
5
|
Destination-passing style and generational garbage collection
– Cheng, Okasaki
- 1996
|
|
3
|
Scalable certi for typed assembly language
– Grossman, Morrisett
- 2000
|