Есть ли работающий инструмент Semantic Diff для C ++? - PullRequest
9 голосов
/ 11 августа 2009

Я нашел только заброшенные проекты, теории и списки возможностей. Но я не смог найти инструмент, который мог бы сравнить два исходных файла C ++ и показать семантические различия.

Конечно, я бы не сравнивал два несвязанных файла или изменения, накопленные за 10 лет разработки и обслуживания. Но изменения, обычно обсуждаемые в обзоре кода, будут понятнее, если будут представлены вместе с правильным значением, вместо текстовых изменений на уровне символов / слов / строк

Ответы [ 4 ]

3 голосов
/ 11 августа 2009

Истинный "семантический дифференциал" невозможен. Ближе был бы инструмент, который сравнивал два исходных файла, чтобы увидеть, как один был получен из другого с помощью операций редактирования абстракций (удаление, копирование, перемещение, переименование) в структурах программы (переменные, выражения, операторы, методы). См. Наш Smart Differencer для инструмента, который делает это для нескольких языков, в скором времени появится C ++.

Март 2013: поддерживаются диалекты GCC / MS C ++ 11.

2 голосов
/ 18 августа 2009

Существует один для C, используемый разработчиками ядра Linux. Не для C ++, хотя

http://coccinelle.lip6.fr

0 голосов
/ 11 августа 2009

Да, это называется «написание комментариев для коммитов» и «отслеживание проблем». Считайте это метаданными для семантического анализа.

0 голосов
/ 11 августа 2009

Это вообще невозможно. Одна программа даже не может сказать, прекратится ли другая (знаменитая проблема остановки ). Для более ограниченных программ (конечно-ограниченных циклов и, возможно, других ограничений) вы можете сделать больше, но это тяжелые вещи, и язык должен быть не C ++, а чем-то менее сложным, ограниченным подмножеством или более простым языком в целом. Наверное, поэтому вы не нашли ничего, что было бы больше, чем началось.

...