2009-08-10 29 views
7

我发现只有被遗弃的项目,理论和功能列表。 但我找不到一个可以比较两个C++源文件并显示语义差异的工具。C++中是否有可用的语义比较工具?

当然我不会比较两个不相关的文件,或在10年的发展和维护积累了变化。但是变化通常在字符/字/行级

回答

-1

这是不可能的,一般在讨论代码审查会更容易理解,如果与应有之义一起呈现,而不是文字的变化。一个程序甚至无法分辨另一个程序是否会终止(着名的Halting Problem)。对于更有限的程序(有限循环,也许还有其他限制),你可以做更多的事情,但这是一件很重要的事情,语言必须是,而不是C++,但不是那么棘手,有限的子集或更简单的语言。这可能就是为什么你找不到任何东西超过了开始。

0

是的,它被称为“书面提交的意见”和“问题跟踪”。考虑用于语义分析的元数据。

+0

但是,这将是代替使用工具 – CsTamas 2009-08-10 20:33:01

+0

真信息ISO层8的处理,。每个版本控制都可以显示带有注释的历史记录,但我从来没有见过将它整合到合并工具中,并且基于每次更改。可能成为一个相当有用的功能...另一方面,可能与代码中的评论冲突。 – ima 2009-08-10 20:48:49

+0

集成到合并工具中?像Git? – greyfade 2009-08-11 00:06:25

3

一个真正的“语义差异”是不可能的。更紧密的工具是比较两个源文件,看看如何通过对程序结构(变量,表达式,语句,方法)进行抽象编辑操作(删除,复制,移动,重命名)来从另一个源文件导出另一个源文件。 请参阅我们的Smart Differencer,该工具可用于少数语言,并且即将推出C++。支持GCC /的C++ 11 MS方言:

2013年3月。

+0

多快?所有类似的工具刚刚开始...... – CsTamas 2009-08-11 13:52:13

+0

预计30-60天。 – 2009-08-11 13:55:38

+0

2010年3月:它已经有好几个月了,刚刚回到这个特别的问题。 – 2010-03-02 05:34:08

1

有一个由Linux内核开发人员使用温度。不为C++虽然

http://coccinelle.lip6.fr

+0

@Brad:他们谈论语义补丁,但它们似乎是“模式匹配”,它们对多个版本的文件中的空格,变量名称等变化不敏感,但它们并不清楚*比较*两个文件以确定它们是否相似。你能特别指出他们在说什么吗? – 2009-09-06 05:16:57

+0

你有spdiff工具来推断语义片http://www.diku.dk/hjemmesider/ansatte/jespera/doc.html。 – LB40 2009-09-16 14:30:28

相关问题