是否存在一类补丁,大致类似于以下内容:
- 对象是一些基本字母中的字符串
- 态射是字符串之间的编辑脚本(“ diff”或“ patches”)
我对以下问题感兴趣:
- 是否存在最小编辑脚本的绝对概念?也许补丁类别丰富了PO集?
- 被合并的补丁的分类pushout?
- 如何将其从字符串推广到树(文件系统或代数数据类型)?
是否存在一类补丁,大致类似于以下内容:
我对以下问题感兴趣:
Answers:
正如Martin所指出的,在补丁的分类表示方面有一些工作。Mimram和Di Giusto的“修补程序分类理论”是该编辑器使用的最广泛的编辑脚本分类方法UNIX diff
。
在他们的意义上,您拥有想要的东西。对象是字母上有限的单词序列,被视为映射,其中表示具有元素的集合。和之间的箭头是射影部分增长映射。内在性和增加性表明复制永远不会相互交叉。您可以在纸上找到所有详细信息。
是的,合并被视为上述类别的免费完成的推动力。我们需要共同完成,以确保我们将合并冲突添加到我们的构造中。并非总是存在合并。
关于您的第二个问题,没有最小编辑脚本的绝对概念,主要有两个原因。
编辑脚本有各种形状和形式。有些作者考虑插入,删除和复制,有些作者也喜欢添加替代项作为操作。从字符串到树进行概括时,大量其他操作变得可行。
关于将编辑脚本通用化为树,已经进行了很多工作。这已分为两个主要工作主体:
未分类的树:仅考虑s表达式。两棵树之间的树编辑距离是所述树的预遍历之间的字符串编辑距离。您可以查看Demaine等人的一些参考书目。或例如Pawlik和Augsten。
类型树:抽象语法树上的补丁,这些树保证保留对象的良好类型,即应用补丁将始终产生有效的AST。在键入的保护伞下,可以考虑的编辑操作较少。例如,替换没有任何意义。然而,存在过的树木序遍历DIFF由Lempsink等。,后来由Vassena进行了扩展。我目前专注于针对我之前指出的问题(例如我们的最新工作或一些较早的工作,试图利用要“修补”的值的类型的结构)与编辑脚本保持距离的方法。
在这两种情况下,我都没有看到对树状结构补丁的仔细分类解释。