树状差异分析

本页总结了一些其他可用的树形差异分析工具。

如果你很着急,可以先看看Autochrome。它的能力很强,并且对设计有着很好的描述。

如果你对学术文献的摘要感兴趣,这个帖子(和它附带的论文--在CC BY-NC的许可下可以被复制)将是一个很好的资源。

json-diff (2012)

语言:JSON 算法:Pairwise comparison
输出:CLI colours

json-diff展示了JSON文件的结构层面的差异分析。如果两者是不完全匹配的,那么它们的子树将是完全不同。例如,"foo"["foo"]是完全不同的。

可以注意的是,json-diff的结果显示十分方便查看。

GumTree (2014)

语言:约有10种编程语言 分析器:多种,包括 srcML
算法:Top-down,随后bottom-up 输出:HTML,Swing GUI或者text

GumTree可以分析多种编程语言,并且进行基于树结构的差异分析,输出一个HTML的结果界面。

GumTree算法在Falleri等人的相关论文《细粒度源码差异分析》中有所描述(DOI, PDF)。它对相同的子树进行贪婪的自下而上的搜索,随后进行自下而上的搜索来匹配其余的子树。

Tree Diff (2017)

语言:S-表达式数据格式 算法:A*搜索 输出:合并后的S-表达式文件

Tristan Hume在他2017年实习期间和在Jane Street期间写了一个树状差分算法。源代码是不可以用的,但是他写了一篇博客来对该设计进行了深入讨论。

该项目找到了Jane Street用作配置文件的s-表达式文件之间的最小差异。它使用了A*搜索来找到他们之间最小的差异,兵建立一个具有:date-switch进行标记差异的新的s-表达式文件。

(Jane Street一样有patdiff,但那似乎是一个面向行的差异分析,并不带着一些空格及整数差异显示。这个工具它并不理解在"foo "中的空格是具有意义的。)

Autochrome (2017)

语言:Clojure 分析器:Custom,并保留注释
算法:Dijkstra算法(A*搜索的先前版本)
输出:HTML

Autochrome使用了一个定制的、保留注释的解析器来分析Clojure。Autochrome使用Dijkstra算法来比较语法树之间的差异。

Auto chrome的网页包括该算法的工作实例以及对该设计权衡的讨论。这是一个用来了解树形差异分析的重要资源。

graphtage (2020)

语言:JSON, XML, HTML, YAML, plist, and CSS
解析器:json5, pyYAML, ignores comments
算法:Levenshtein距离 输出:CLI colours

graphtage通过将结构化数据解析为通用文件格式,随后进行差异分析。它甚至允许比较JSON文件和YAML文件之间的区别。

与json-diff一样,它不认为 ["foo"]"foo"之间有任何相似之处。

Diffsitter (2020)

解析器:Tree-sitter 算法:LCS(Longest-common-subsequence)
输出:CLI colours

Diffsitter是另一个使用了tree-sitter解析器的差异分析工具。它使用了LCS分析语法树中的子树

sdiff (2021)

语言:Scheme 解析器:Scheme内置的read,并忽略注释
算法:Chawathe论文中的MH-Diff
输出:CLI colours

Semantically meaningful S-expression diff: Tree-diff for lisp source code 在FOSDEM 2021中被发表。