A Framework for Selective Recompilation in the Presence of Complex Intermodule Dependencies
Craig Chambers,
Jeffrey Dean, and
David Grove
Compilers and other programming environment tools derive information
from the source code of programs; derived information includes
compiled code, interprocedural summary information, and call graph
views. If the source program changes, the derived information needs
to be updated. We present a simple framework for maintaining
intermodule dependencies, embodying different tradeoffs in terms of
space usage, speed of processing, and selectivity of invalidation,
that eases the implementation of incremental update of derived
information. Our framework augments a directed acyclic graph
representation of dependencies with factoring nodes (to save space)
and filtering nodes (to increase selectivity), and it includes an
algorithm for efficient invalidation processing. We show how several
schemes for selective recompilation, such as smart recompilation,
filter sets for interprocedural summary information, and dependencies
for whole-program optimization of object-oriented languages, map
naturally onto our framework. For this latter application, by
exploiting the facilities of our framework, we are able to reduce the
number of lines of source code recompiled by a factor of seven over a
header file-based scheme, and by a factor of two over the previous
state-of-the-art selective dependency mechanism without consuming
additional space.
Appeared in ICSE'95 in Seattle, April, 1995.
To get the PostScript file, click
here.
Cecil/Vortex
Project