“ -d”选项对diff有什么影响?


24

diffOpenBSD上的实现具有非标准-d选项,其中包含以下文档:

-d

尽力产生尽可能小的差异。处理具有许多更改的大文件时,这可能会消耗大量处理能力和内存。

对于diff较短的文档,GNU 实现具有相同的选项

-d--minimal

尝试找到较小的一组更改

我不时使用此选项只是为了查看它是否生成与diff没有该选项的相同命令具有任何形状或形式的输出,但是我从未见过任何区别(无双关)。

有人可以提供或指出一个示例,其中该选项实际上与没有命令的同一命令产生不同的结果-d吗?或者,如果有人可以解释启用此选项所需的情况。我也不确定“最小”是指“输出的行数减少”还是“更少的请求”。

一个没有根据的猜测是,它与很大的结块有关。


1
unix.stackexchange.com/questions/472528激起了您的好奇心吗?(-:
JdeBP '18

@JdeBP是的。它让我想起了这个标志,以及一个事实,就是我从来不知道它会做什么,所以我根本不知道它在做什么。
库萨兰达

1
info diff performance解释它IIRC
斯特凡Chazelas

1
显然相关。遗憾的是,没有Myers的示例->效果很小。
艾萨克(Isaac)

1
我真的很想得到一个示例,该示例将创建不同的输出,gdiff -d以检查对OpenBSD的添加是否有用。从我的测试中,我看不到任何差异,但是很明显,OpenBSD代码会降低性能,这似乎是一个很大的影响,因为只要您使用正常的文件大小,Douglas McIlroy的diff算法会比gdiff更快。
schily

Answers:


15

diffFreeBSD上也使用的GNU中,该--minimal标志触发Paul Eggert的算法变化,从而导致该变化“将成本限制为以O(N**1.5 log N)产生具有差值的大型输入的次优输出为代价”。更具体地说,它导致它应用几种试探法,这些试探法仅用于寻找最接近最优的解决方案,并且将“令人困惑”的行作为额外的差异扔掉。

diff使用diff1970年代较早的Unix 算法的OpenBSD中,采用的算法应归功于Harold Stone,并且--minimal标志会触发一个搜索,该搜索(实际上是无符号)受一个无符号整数的最大值而不是平方根限制比较行范围的大小(如果较大则为256)。

进一步阅读


1
当我从UNIX来源创建更好的差异时,我检查了OpenBSD增强功能,找不到任何更好的结果。注意原始的stone()函数使用:`} while((y = b [++ j])> 0);`和BTW:对于普通文件大小,增强的UNIX diff比GNU diff更快。
schily
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.