An Experimental Implementation of Self-adjusting Bidirectional Transformations

Bidirectional transformations provide a novel mechanism for synchronizing and maintaining the consistency of information between source and view. Despite many advantages, bidirectional transformations are limited in achieving incremental computing that concerns maintaining the source-view relationship of a program as the source of a program is changed. Recent work on incremental computing such as self-adjusting computation developed useful techniques for writing programs which can adapt their view to any small or large change in the source. In this article, we realize that bidirectional transformations on trees can be made more efficient by using self-adjusting techniques. The underlying systems of forward and backward transformations are represented with dynamic dependence graphs that record the data dependencies and control dependencies. When the source or the view is modified, a change propagation algorithm will update the connected view or source, and the dynamic dependence graphs by propagating the changes through the graphs and re-executing code where necessary. The idea is to use forward and backward dynamic dependence graphs to identify and re-execute the parts of the computation that are affected by modifications on the source or the view. We refer to this approach as self-adjusting bidirectional transformations and show that it is practical and efficient.