Hello, I'm developing a tool for "diffing" program by parse trees and not text. It is written in Racket and can process Lisp family languages, C++, JavaScript and Python. It has a JavaScript based interactive UI for browsing the diff results.
You can find a demo of it (diffing two Emacs Lisp programs) here: http://www.cs.indiana.edu/~yw21/demos/paredit20-paredit22.html (Try scrolling down the program, and click on the code in white boxes.) If you are interested in trying it out on Racket programs, please check it out from GitHub: https://github.com/yinwang0/ydiff An introductory article can be found on my blog: http://yinwang0.wordpress.com/2012/01/03/ydiff It is still in pretty early stage so probably only the Lisp part is robust enough for daily use. I'm proceeding to design a "unified interchange format" for ASTs. The motivation is that compiler writers for various languages can output this format, so that this kind of structural diff can be extended to new languages quickly. I would be happy to get feedback and suggestions about it so that I can work to improve it. If you would like volunteer adding support for more languages, please let me know. Thanks. -- Yin ____________________ Racket Users list: http://lists.racket-lang.org/users