小编cen*_*uro的帖子

diff/patch如何工作以及它们的安全性如何?

关于它们如何工作,我想知道低级工作的东西:

  1. 什么会引发合并冲突?
  2. 工具是否也使用上下文来应用补丁?
  3. 他们如何处理实际上没有修改源代码行为的更改?例如,交换函数定义位置.

关于安全性,事实上,巨大的Linux内核存储库是他们安全的证明.但我想知道以下几点:

  1. 关于用户应该注意的工具是否有任何警告/限制?
  2. 算法是否被证明不会产生错误的结果?
  3. 如果没有,是否有实施/论文提出集成测试,至少证明它们在经验上没有错误?像BrianKorverJamesCoplien这些论文的内容.
  4. 同样,Linux存储库应该足以满足前一点,但我想知道一些更通用的东西.源代码,即使在更改时也不会发生太大变化(特别是因为实现了算法和语法限制),但是安全性是否可以推广到通用文本文件?

编辑

好的人,我正在编辑,因为问题含糊不清,答案没有解决细节问题.

Git/diff/patch详细信息

Git似乎默认使用的统一差异格式基本上输出三个东西:变化,变化周围的上下文以及与上下文相关的行号.这些东西中的每一个可能同时也可能没有同时更改,因此Git基本上必须处理8种可能的情况.

例如,如果在上下文之前添加或删除了行,则行号将不同; 但是如果上下文和更改仍然相同,那么diff可以使用上下文本身来对齐文本并应用补丁(我不知道这是否确实发生).现在,其他案件会发生什么?我想知道Git如何决定自动应用更改以及何时决定发出错误并让用户解决冲突的详细信息.

可靠性

我非常确定Git是完全可靠的,因为它确实具有完整的提交历史并且可以遍历历史.我想要的是一些指向学术研究和有关这方面的参考资料,如果它们存在的话.

仍然有点与这个主题相关,我们知道Git/diff将文件视为通用文本文件并在线上工作.此外,diff使用的LCS算法将生成一个试图最小化变化数量的补丁.

所以这里有一些我想知道的事情:

  1. 为什么使用LCS而不是其他字符串度量算法?
  2. 如果使用LCS,为什么不使用度量​​的修改版本来考虑底层语言的语法方面?
  3. 如果使用考虑到语法方面的这种指标,它们能否带来好处?在这种情况下的好处可能是任何东西,例如,更清洁的"责备日志".

同样,这些可能是一个巨大的主题,欢迎学术文章.

git diff patch lcs levenshtein-distance

14
推荐指数
1
解决办法
676
查看次数

改进PyMongo套接字recv

我已经使用cProfile对我的代码(使用带有大量批量操作的PyMongo 3.0.3)进行了一些分析,结果发现在套接字上花了很多时间:

14006 68.823 0.005 68.823 0.005 {method 'recv' of '_socket.socket' objects}

我发现这个有点相关的答案,解决方案很简单.有没有办法将TCP_NOWAIT选项传递给PyMongo而无需更改libs代码?

sockets python-3.x pymongo-3.x

6
推荐指数
1
解决办法
211
查看次数

带有 bang 的 Ruby 链接

是否可以在不使用作业的情况下编写这段代码摘录?

self.name = self.name.to_s.squeeze(' ').strip

我尝试过使用这些方法的爆炸版本,但不能很好地使用,因为nil如果操作没有执行任何更改(而不是返回self),它们就会返回。

ruby

2
推荐指数
1
解决办法
628
查看次数

标签 统计

diff ×1

git ×1

lcs ×1

levenshtein-distance ×1

patch ×1

pymongo-3.x ×1

python-3.x ×1

ruby ×1

sockets ×1