We present a framework for applying memoization selectively. The framework provides programmer control over equality, space usage, and identification of precise dependences so that memoization can be applied according to the needs of an application. Two key properties of the framework are that it is efficient and yields programs whose performance can be analyzed using standard techniques. We describe the framework in the context of a functional language and an implementation as an SML library. The language is based on a modal type system and allows the programmer to express programs that reveal their true data dependences when executed. The SML implementation cannot support this modal type system statically, but instead employs run-time checks to ensure correct usage of primitives.
|
5825
|
Introduction to Algorithms
– Cormen, Leiserson, et al.
- 1992
|
|
2005
|
The Design and Analysis of Computer Algorithms
– Aho, Hopcroft, et al.
- 1974
|
|
1399
|
Dynamic Programming
– Bellman
- 1957
|
|
496
|
S.: The Implementation of Functional Programming Languages
– Jones
- 1987
|
|
147
|
A Basis for a Mathematical Theory of Computation
– McCarthy
- 1963
|
|
110
|
A judgmental reconstruction of modal logic
– Pfenning, Davies
- 1999
|
|
72
|
memo’ functions and machine learning
– Michie
- 1968
|
|
68
|
Tabulation Techniques for Recursive Programs
– Bird
- 1980
|
|
57
|
Lazy memo-functions
– Hughes
- 1985
|
|
52
|
Incremental computation via function caching
– Pugh, Teitelbaum
- 1989
|
|
51
|
Analysis and caching of dependencies
– Abadi, Lampson, et al.
- 1996
|
|
45
|
Hash-consing garbage collection
– Appel, Gonçalves
- 1993
|
|
44
|
Structural cut elimination
– Pfenning
- 1994
|
|
39
|
Automating derivation of incremental programs
– Zhang, Liu
- 1998
|
|
34
|
Anatomy of LISP
– Allen
- 1978
|
|
32
|
Natural deduction for intuitionistic non-commutative linear logic
– Polakow, Pfenning
- 1999
|
|
31
|
Static caching for incremental computation
– Liu, Stoller, et al.
- 1998
|
|
29
|
Selective memoization
– Acar, Blelloch, et al.
|
|
29
|
Incremental evaluation of attribute grammars with application to syntax directed editors
– Demers, Reps, et al.
- 1981
|
|
27
|
Eliminating Redundant Recursive Calls
– Cohen
- 1983
|
|
26
|
Adaptive functional programming
– Acar, Blelloch, et al.
- 2002
|
|
23
|
Incremental reduction in the lambda calculus
– Field, Teitelbaum
- 1990
|
|
23
|
Dynamic programming via static incrementalization
– Liu, Stoller
- 1999
|
|
19
|
Caching function calls using precise dependencies
– Heydon, Levin, et al.
|
|
19
|
The Vesta Approach to Software Configuration Management
– Heydon, Levin, et al.
- 2001
|
|
18
|
Techniques for automatic memoization with applications to context-free parsing
– Norvig
- 1991
|
|
15
|
incremental computation as a programming abstraction
– Alphonse
- 1992
|
|
14
|
Speci and Transformation of Programs|A Formal Approach to Software Development
– Partsch
- 1990
|
|
13
|
Using cached functions and constructors for incremental attribute evaluation
– Pennings, Swierstra, et al.
- 1992
|
|
10
|
Generating Incremental Attribute Evaluators
– Pennings
- 1994
|
|
10
|
An Example of Hierarchical Design and Proof
– Spitzen, Levitt, et al.
- 1978
|
|
9
|
Automating program speedup by deciding what to cache
– Mostow, Cohen
- 1985
|
|
8
|
An improved replacement strategy for function caching
– Pugh
- 1988
|
|
8
|
Incremental compilation via partial evaluation
– Sundaresh, Hudak
- 1991
|
|
5
|
Hashing lemmas on time complexities with applications to formula manipulation
– Goto, Kanada
- 1976
|
|
5
|
The wizard of TILT: Efficient(?), convenient and abstract type representations
– Murphy, Harper, et al.
- 2002
|
|
3
|
Elimination of recursive calls using a small table of randomly selected function values
– Hilden
- 1976
|
|
3
|
Improving software performance with automatic memoization
– Hall, McName
- 1997
|
|
2
|
Using automatic memoization as a software engineering tool in real-world ai systems
– Mayfield, Finin, et al.
|