Combinators for bidirectional tree transformations: A linguistic approach to the view-update problem
ACM Transactions on Programming Languages and Systems (TOPLAS) - Special issue on POPL 2005
Bidirectionalization transformation based on automatic derivation of view complement functions
ICFP '07 Proceedings of the 12th ACM SIGPLAN international conference on Functional programming
A programmable editor for developing structured documents based on bidirectional transformations
Higher-Order and Symbolic Computation
Bidirectional Transformations: A Cross-Discipline Perspective
ICMT '09 Proceedings of the 2nd International Conference on Theory and Practice of Model Transformations
Combining syntactic and semantic bidirectionalization
Proceedings of the 15th ACM SIGPLAN international conference on Functional programming
Bidirectionalizing graph transformations
Proceedings of the 15th ACM SIGPLAN international conference on Functional programming
Graph-transformation verification using monadic second-order logic
Proceedings of the 13th international ACM SIGPLAN symposium on Principles and practices of declarative programming
Dagstuhl seminar on bidirectional transformations (BX)
ACM SIGMOD Record
GRoundTram: An integrated framework for developing well-behaved bidirectional model transformations
ASE '11 Proceedings of the 2011 26th IEEE/ACM International Conference on Automated Software Engineering
Maintaining invariant traceability through bidirectional transformations
Proceedings of the 34th International Conference on Software Engineering
Marker-Directed optimization of UnCAL graph transformations
LOPSTR'11 Proceedings of the 21st international conference on Logic-Based Program Synthesis and Transformation
Hi-index | 0.00 |
Bidirectional transformation consists of a pair of transformations, describing not only a forward transformation from a source to a view, but also a backward transformation showing how to reflect the changes in the view to the source. Bidirectional transformation provides a novel mechanism for synchronizing and maintaining the consistency of information between input and output, and has many potential applications in software development, including model synchronization, round-trip engineering, software evolution, multiple-view software development, reverse software engineering, as well as the well-known view updating mechanism which has been intensively studied in the database community for decades. To support systematical development of well-behaved bidirectional transformations, much research has been devoted to design of bidirectional languages that can be interpreted both forwardly and backwardly while guaranteeing the roundtrip property between the forward and the backward transformations. Despite many promising results, most of them are limited to lists and trees. In fact, there are challenges in designing a language for bidirectional transformation on graphs. First, unlike lists and trees, there is no unique way to represent, construct, and decompose a general graph, which requires more precise definition of equivalence between two graphs. Second, graphs have sharing nodes and cycles, which makes forward computation much more complicated than that on trees (let alone to say about backward computation), where naive computation on graphs would visit the same nodes many times and possibly infinitely often. We have challenged the problem of bidirectional transformations on graphs, and succeeded in bidirectionalizing graph queries (in UnQL) and implementing a bidirectional graph transformation engine called GRoundTram. In GRoundTram, graphs are treated as regular trees and manipulated by structural recursion that enjoys a nice bulk and bidirectional semantics. Although GRoundTram has been successfully applied to nontrivial model-code co-evolution, there are still many practical issues that should be addressed to make it be more useful. In this talk, I shall briefly explain our solution to the problem of bidirectional graph transformation and demonstrate some applications in bidirectional model-driven software development, and focus on discussing practical issues in manipulating various graphs (such as unordered, ordered, and probability graphs), determining backward transformation, and improving efficiency and scalability.