| | |
Summary: 6
Graph Rewriting Systems
For Efficient Compilation
Z. M. Ariola and Arvind
6.1 INTRODUCTION
A modern trend in programming language theory has been to develop calculi to cap
ture some specific aspects of functional language implementations. For example, sev
eral calculi for explicit substitution have recently been developed by Curien and L'evy
[ACCL90, Cur86, Cur91, HL89, Hin77]. An attempt to formalize ``weak reduction'',
i.e., the kind of reduction that is actually done by most functional language imple
mentations, is described by Maranget [Mar91]. Barendregt et al., have put forth a
calculus to capture sharing in graph reduction implementation of Term Rewriting
Systems (TRS) [BBvE + 87, BvEG + 87, Ken90, BvEvLP87]. In the same vein, we want
to develop a calculus to capture the sharing of subexpressions in a more general class
of languages.
Specification of sharing is desirable in the intermediate language used by a compiler
for a purely functional language. Consider the function definition F x = x+x and the
expression F(2+3). Any decent implementation, independent of the evaluation strategy
(normalorder or applicativeorder) it employs, will evaluate the subexpression 2 + 3
only once. Dealing with sharing is important if the intermediate language is to be
|