Incremental Updates for Efficient Bidirectional Transformations
Meng Wang‚ Jeremy Gibbons and Nicolas Wu
A bidirectional transformation is a system that consists of two mappings between a source and a view data object, one in each direction. When a the view is modified, the source is updated accordingly. The key to handling large data objects that are subject to relatively small modifications is to process the updates incrementally. Incrementality has been explored in the settings of relational databases and graph transformations, where the data is typically not typed (in the sense of not being restricted to a particular shape). This flexibility in structure makes it relatively easy to divide the data into separate parts that can be transformed and updated independently. The same is not true if the data is to be encoded with more general purpose algebraic datatypes, with transformations defined as functions: dividing data into well-typed separate parts is tricky, and recursions typically create interdependencies. In this paper, we look at the identification of transformations that support incremental updates, and devise a constructive process to achieve such transformations.