原文: SemanticDiff 设计 Bliki 索引
多数版本管理系统的实现仰仗着能比较出文件不同版本的变化,通常称作diff,源自Unix比较版本变化的命令。针对文本和二进制文件都有优秀的diff (以及merge)算法了,但这些diff工具的弊病是它们都非常愚钝,只会傻乎乎地对比两个版本,简单地告诉你怎么从一个版本变成另一个。
如果diff有了语义,它就不单单知道改变的效果,还能理解做这个修改的目的了,
举个例子,想一下我用工具对一个class做了一个提炼函数(Extract Method)重构,两个版本之间只有这个修改。现在的diff工具只能看到代码文本变了,但它们不知道我刚才做的是一个重构,因此查看diff结果只能告诉我哪儿修改了,无法以某种方式凸显这是个提炼函数重构。如果真能知道我做了什么,merge功能也会更好用。
(或许已经有一条广为接受的术语来说这件事了,果真如此请告诉我。)