2009-08-10 10 views
7

He encontrado solo proyectos abandonados, teorías y listas de características. Pero no pude encontrar una herramienta que pueda comparar dos archivos fuente C++ y mostrar diferencias semánticas.¿Existe una herramienta Diff Semántica de trabajo para C++?

Por supuesto, no compararía dos archivos no relacionados o los cambios acumulados durante 10 años de desarrollo y mantenimiento. Pero los cambios generalmente discutidos en una revisión de código se entenderían más fácilmente, si se presentan junto con el significado adecuado, en lugar de cambios de texto en el nivel de char/palabra/línea

Respuesta

-1

No es posible, en general. Un programa no puede decir si otro terminará (el famoso Halting Problem). Para programas más limitados (bucles finitos y quizás otras restricciones) puede hacer más, pero es algo pesado, y el lenguaje debería ser, no C++ sino algo menos complicado, un subconjunto limitado o un lenguaje más simple. Probablemente es por eso que no encuentras nada que haya sido más que comenzado.

0

Sí, se llama "escribir comentarios para commits" y "issue tracking". Considere los metadatos para el análisis semántico.

+0

Pero eso sería ISO capa 8 de procesamiento de la información, en lugar de utilizar una herramienta – CsTamas

+0

verdadera. Cada control de versiones puede mostrar el historial con comentarios, pero nunca lo he visto integrado en la herramienta de fusión, según el cambio. Podría convertirse en una característica bastante útil ... en el otro, podría chocar con los comentarios en el código. – ima

+0

¿Integrado en la herramienta de fusión? ¿Como Git? – greyfade

3

Una verdadera "diferencia semántica" es imposible. Más cerca sería una herramienta que comparaba dos archivos fuente para ver cómo uno se derivaba del otro mediante operaciones de edición abstracta (eliminar, copiar, mover, renombrar) en las estructuras del programa (variables, expresiones, declaraciones, métodos). Consulte nuestra Smart Differencer para obtener una herramienta que hace esto para algunos idiomas, con C++ próximamente.

Marzo de 2013: dialectos GCC/MS de C++ 11 compatibles.

+0

¿Qué tan pronto? Todas las herramientas similares acababan de comenzar ... – CsTamas

+0

Esperado en 30-60 días. –

+0

Marzo de 2010: ha estado disponible durante varios meses, acaba de volver a esta pregunta SO tan particular. –

1

Hay uno para C utilizado por los desarrolladores de Linux kernel. No es para C++, aunque

http://coccinelle.lip6.fr

+0

@Brad: hablan sobre parches semánticos, pero parece que lo que quieren decir es "coincidencias de patrones" que son insensibles a los cambios en espacios en blanco, nombres de variables, etc. en múltiples versiones de un archivo, pero no está claro que * compara * dos archivos para determinar si son similares.¿Puedes señalar específicamente a dónde dicen eso? –

+0

Tiene la herramienta spdiff para inferir parches semánticos http://www.diku.dk/hjemmesider/ansatte/jespera/doc.html. – LB40

Cuestiones relacionadas