Refinement types for precisely named cache locations
Many programming language techniques for incremental computation employ programmer-specified names for cached information. At runtime, each name identifies a "cache location" for a dynamic data value or a sub-computation; in sum, these cache location choices guide change propagation and in...
Saved in:
Main Authors | , , , |
---|---|
Format | Journal Article |
Language | English |
Published |
01.10.2016
|
Subjects | |
Online Access | Get full text |
Cover
Loading…
Summary: | Many programming language techniques for incremental computation employ
programmer-specified names for cached information. At runtime, each name
identifies a "cache location" for a dynamic data value or a sub-computation; in
sum, these cache location choices guide change propagation and incremental
(re)execution.
We call a cache location name precise when it identifies at most one value or
subcomputation; we call all other names imprecise, or ambiguous. At a minimum,
cache location names must be precise to ensure that change propagation works
correctly; yet, reasoning statically about names in incremental programs
remains an open problem.
As a first step, this paper defines and solves the precise name problem,
where we verify that incremental programs with explicit names use them
precisely. To do so, we give a refinement type and effect system, and prove it
sound (every well-typed program uses names precisely). We also demonstrate that
this type system is expressive by verifying example programs that compute over
efficient representations of incremental sequences and sets. Beyond verifying
these programs, our type system also describes their dynamic naming strategies,
e.g., for library documentation purposes. |
---|---|
DOI: | 10.48550/arxiv.1610.00097 |