差异,补丁和合并的类别理论处理?


14

是否存在一类补丁,大致类似于以下内容:

  • 对象是一些基本字母中的字符串
  • 态射是字符串之间的编辑脚本(“ diff”或“ patches”)

我对以下问题感兴趣:

  • 是否存在最小编辑脚本的绝对概念?也许补丁类别丰富了PO集?
  • 合并的补丁的分类pushout?
  • 如何将其从字符串推广到树(文件系统或代数数据类型)?

1
您可能想看看Darcs VCS 背后的理论
-Bergi,

1
...或Pijul,这是最近一次尝试创建“较新的Darcs”的尝试。(据我从那次谈话中所记得的,合并是diff类别的“免费完成”中的推出按钮)。
phipsgabler

Answers:


15

正如Martin所指出的,在补丁的分类表示方面有一些工作。Mimram和Di Giusto的“修补程序分类理论”是该编辑器使用的最广泛的编辑脚本分类方法UNIX diff

在他们的意义上,您拥有想要的东西。对象是字母L上有限的单词序列,被视为映射A:[n]大号,其中[n]表示具有n元素的集合。A:[n]LB:[m]L之间的箭头是射影部分增长映射f:[n][m]。内在性和增加性表明复制永远不会相互交叉。您可以在纸上找到所有详细信息。

是的,合并被视为上述类别的免费完成的推动力。我们需要共同完成,以确保我们将合并冲突添加到我们的构造中。并非总是存在合并。

关于您的第二个问题,没有最小编辑脚本的绝对概念,主要有两个原因。

  1. 编辑脚本有各种形状和形式。有些作者考虑插入,删除和复制,有些作者也喜欢添加替代项作为操作。从字符串到树进行概括时,大量其他操作变得可行。

  2. abba

关于将编辑脚本通用化为树,已经进行了很多工作。这已分为两个主要工作主体:

  • 未分类的树:仅考虑s表达式。两棵树之间的树编辑距离是所述树的预遍历之间的字符串编辑距离。您可以查看Demaine等人的一些参考书目或例如Pawlik和Augsten

  • 类型树:抽象语法树上的补丁,这些树保证保留对象的良好类型,即应用补丁将始终产生有效的AST。在键入的保护伞下,可以考虑的编辑操作较少。例如,替换没有任何意义。然而,存在过的树木序遍历DIFFLempsink等。,后来由Vassena进行了扩展。我目前专注于针对我之前指出的问题(例如我们的最新工作或一些较早的工作,试图利用要“修补”的值的类型的结构)与编辑脚本保持距离的方法。

在这两种情况下,我都没有看到对树状结构补丁的仔细分类解释。


很棒的答案!但是,为什么不应该仅仅因为它们不是唯一的就没有最小编辑脚本的绝对概念呢?(Co)限制也不是唯一的,只限于同构。
特里

我想我们可以采取补充措施,包括冲突,或者只是说推出并非总是存在,而当它们不存在时就没有合并吗?
特里

1
一种diff一种diff3

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.