|
Most version control systems rely on using and understanding the
changes between versions of artifacts - often referred to as diffs
from the command that can produce them in Unix. Good diff (and merge) algorithms are around for text and
binary files. The trouble with
these diffs is that they are rather dumb. All they do is look at the
two artifact versions and generate a simple way of getting from one
to another. A semantic diff would understand the purpose of the change,
rather than just the effect. For example, lets imagine I make a change to a class by executing
an Extract Method refactoring in a tool and that's my only change
between versions. With current tools they see the change in the
program text, but they don't know that I did a refactoring. As a
result when I examine the diff between the two versions it can show
me the changes, but it can't do it in such a way that highlights the
refactoring. This also can make merges more awkward than it might if
it actually knew what I was doing. (There may be a generally accepted term for this, if so please
let me know.)
|