2009-08-10 30 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

相關問題