108 votes

Sémantique Diff Utilitaires

J'essaie de trouver quelques bons exemples de sémantique, la comparaison/fusion de services publics. Le paradigme traditionnel de la comparaison de fichiers de code source fonctionne en comparant les traits et les caractères.. mais quel utilitaires (pour n'importe quelle langue) qui considère la structure de code lorsque l'on compare les fichiers?

Par exemple, les diff programmes rapport "la différence à caractère 2 de la ligne 125. Fichier x contient v-o-i-d, où le fichier de y contient b-o-o-l". Un outil spécialisé devrait être en mesure de rapport "type de Retour de la méthode doSomething() a changé de nulle bool".

Je dirais que ce type de sémantique de l'information est effectivement ce que l'utilisateur est à la recherche d'lors de la comparaison de code, et devrait être l'objectif de la prochaine génération de progamming outils. Existe-il des exemples de cela dans les outils disponibles?

37voto

pablo Points 3496

Nous avons développé un outil qui est capable de traiter ce scénario. Vérifier http://www.semanticmerge.com

Il fusionne (et les différences) basée sur la structure du code et de ne pas utiliser de texte basé sur des algorithmes, qui permet essentiellement de faire face à des cas comme le suivant, impliquant une forte refactoriser. Il est également en mesure de rendre à la fois les différences et les conflits de fusion comme vous pouvez le voir ci-dessous:

enter image description here

Et au lieu de se confondre avec les blocs de texte en cours de déplacement, car il traite tout d'abord, il est capable d'afficher les conflits par la méthode de base (par élément, en fait). Un cas comme celui de la précédente n'aurez même pas le manuel de conflits à résoudre.

enter image description here

C'est une langue-connaissance de l'outil de fusion et il a été génial d'être enfin en mesure de répondre à cette DONC, la question :-)

30voto

Hosam Aly Points 14797

L'éclipse a eu cette fonction pendant une longue période. Il est appelé "Structure Comparer", et c'est très agréable. Voici un exemple de capture d'écran pour Java, suivies par un autre pour un fichier XML:

(Note au moins et plus d'icônes sur les méthodes dans le volet supérieur.)

Eclipse's Java Structure ComparerEclipse's XML Structure Comparer

14voto

Ira Baxter Points 48153

Faire sémantique "comparaisons" eh bien, vous avez besoin de comparer la syntaxe des arbres de les langues, et de prendre en compte la signification des symboles. Un vraiment bon sémantique diff serait de comprendre la langue de la sémantique, et de réaliser lorsqu'un bloc de code est une fonction équivalente à celle d'un autre. Va cette mesure nécessite un prouveur de théorèmes, et alors qu'il serait extrêmement mignon, n'est actuellement pas pratique pour un véritable outil de travail.

Un mécanisme d'approximation est tout simplement en comparant l'arbre de syntaxe et de reporting les changements en termes de structures inséré, supprimé, déplacé ou modifié. Obtenir un peu plus près à une "sémantique" de comparaison, on pourrait en rapport lorsqu'un identificateur est modifiée de façon uniforme dans un bloc de code.

Voir http://www.semanticdesigns.com/Products/SmartDifferencer/index.html pour un arbre de syntaxe à base de moteur de comparaison qui fonctionne avec de nombreuses langues, qui ne le ci-dessus rapprochement.

EDIT Jan 2010: les Versions disponibles pour C++, C#, Java, PHP, COBOL. Le site montre des exemples précis pour la plupart de ces.

EDITION Mai 2010: Python et JavaScript ajouté.

EDIT Oct 2010: EGL ajouté.

EDIT Nov 2010: VB6, VBScript, VB.net ajouté

12voto

bendin Points 6651

Ce que vous êtes à la recherche d'un "arbre de diff". Il s'avère que c'est beaucoup plus difficile de bien faire qu'une simple ligne textuelle orientée diff, qui est vraiment juste la comparaison de deux plates des séquences.

"Un Grain fin XML Structurels Approche de la Comparaison", conclut, en partie avec:

Notre étude théorique ainsi que notre évaluation expérimentale a montré que la méthode proposée donne amélioration de la similarité structurelle des résultats avec concernant les alternatives existantes, tout en ayant la complexité en même temps (O(N^2))

(l'emphase est mienne)

En effet, si vous êtes à la recherche pour plus d'exemples d'arbre de différenciation, je suggère en se concentrant sur XML depuis ce qui a été conduite à l'évolution des pratiques dans ce domaine.

5voto

Christian Oudard Points 13461

Shameless plug pour mon propre projet:

HTML Arbre Diff ne structure-connaissance de la comparaison de xml et des documents html, écrit en python.

http://pypi.python.org/pypi/html-tree-diff/0.1.0

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X