Français

Outils de développement · Comparaison de texte

Une brève histoire des différences Unix : Hunt, McIlroy et le modèle basé sur les lignes

· Contexte

texte-diff algorithmes historique du logiciel

Une chronologie historique s'arrêtant à un panel de comparaison LCS moderne vérifié
Illustration vectorielle originale de ToolAcre

Les traces diffèrent des Bell Labs dans les années 1970 aux outils d'aujourd'hui, expliquant pourquoi la comparaison de texte par lignes est devenue la norme et comment les algorithmes ultérieurs l'ont affiné.

Pourquoi chaque image de « ce qui a changé » ressemble à une différence Unix — s'ouvre sur l'observation que les sites d'hébergement de code, les outils de révision et les outils de navigation héritent tous du même modèle

Les écrans de révision modernes partagent souvent une grammaire visuelle de contexte inchangé, de suppressions et d'ajouts. Il est tentant de transformer cette ressemblance en une histoire complète de la lignée, mais ce référentiel est une preuve de l'implémentation actuelle de ToolAcre plutôt qu'une archive principale de l'histoire d'Unix.

L'article sécuritaire distingue donc deux tâches. Il explique en détail ce que la présente source prouve et marque les noms historiques, les dates et les motifs du manuel comme nécessitant des références externes faisant autorité. La familiarité n'est pas une citation, en particulier pour la paternité d'un algorithme.

Bell Labs et le problème de la comparaison des fichiers — décrit le besoin des premiers Unix de comparer les fichiers sources et le travail de Douglas McIlroy et James Hunt

Le plan attribue les premiers travaux aux chiffres des Bell Labs. Aucun des quatre fichiers sources Text diff ne documente cet historique, et la tâche interdit les revendications inventées ou non citées. Ce module ne répète donc pas les détails biographiques, les citations ou les dates comme des faits établis.

Un futur article historique doit citer directement des articles, des manuels ou des archives institutionnelles. Jusqu’à ce que ces sources fassent partie de l’ensemble des preuves, la correction est explicite : ToolAcre peut aujourd’hui démontrer un modèle de différence linéaire, mais il ne peut pas authentifier chaque étape de l’histoire d’origine du modèle.

La paternité des Bell Labs et l'histoire des débuts d'Unix nécessitent des sources primaires externes non présentes dans ce référentiel

Le code actuel se divise selon les conventions de nouvelle ligne normalisées et compare les tableaux de lignes. Ce fait explique la granularité actuelle. Cela ne prouve pas que les télétypes ou les contraintes de stockage ont causé un choix de conception historique, car aucun matériel historique n'est importé dans la mise en œuvre.

La distinction compte au-delà de l'érudition. « Cet outil fonctionne en lignes » est reproductible par tests. « Les lignes ont été choisies pour cette raison historique » est une affirmation causale nécessitant des documents de l'époque. Une bonne rédaction technique n'utilise pas le code actuel comme preuve rétroactive d'une intention passée.

Le référentiel prouve que ToolAcre compare les lignes ; cela ne prouve pas pourquoi les systèmes historiques les ont choisis

`toUnifiedText` émet des étiquettes `---` et `+++` suivies de chaque ligne préfixée par un espace, moins ou plus. Il a la forme d'un patch et est utile pour le téléchargement, mais il ne contient aucun en-tête de morceau `@@`. L’appeler une différence unifiée complète exagérerait le format implémenté ici.

L'itinéraire ne génère pas non plus de formats normaux ou contextuels. L'évolution historique de ces formats mérite peut-être d'être expliquée à l'aide de manuels externes, mais la sortie fournie prend en charge une description plus étroite : un flux lisible sur une ligne complète avec des marqueurs familiers et des étiquettes fournies par l'appelant.

ToolAcre exporte un flux en forme de patch, et non des formats de comparaison historiques complets

Le plan indique que les moteurs modernes utilisent Myers, mais pas ToolAcre. Son en-tête de fichier nomme la programmation dynamique LCS simple et documente le temps et la mémoire O(n·m) sur les différents supports. L'implémentation remplit une table `Uint32Array` et reconstruit un chemin à travers celle-ci.

Il ne s'agit pas d'une correction esthétique. Les noms d’algorithmes comportent une complexité et un comportement de liaison spécifiques. Le découpage des préfixes et des suffixes ainsi qu'un capuchon de ligne 2,000 rendent cette conception adaptée aux différences collées limitées. Les lecteurs ne doivent pas transférer une revendication de complexité Myers sur du code avec une matrice quadratique.

ToolAcre utilise une programmation dynamique LCS simple, pas Myers

La comparaison basée sur les lignes ne parvient toujours pas à identifier l'équivalence sémantique, les blocs déplacés ou l'intention de formatage. Ces limitations découlent directement des clés de chaîne ordonnées. Un compilateur peut considérer deux fragments sources comme équivalents tandis qu'une ligne de comparaison signale les remplacements, ou l'inverse dans le cadre d'une normalisation agressive.

Le modèle original reste utile précisément parce que son résultat est inspectable. Chaque ligne comporte du texte, du type et des numéros de ligne spécifiques au côté. L’examinateur peut être en désaccord avec un alignement tout en tenant compte de chaque ligne, ce qui est plus difficile avec un score opaque de « sens modifié ».

Ce que ceci ne couvre pas : comparaison binaire, compression delta et composants internes de contrôle de version

Les deltas binaires, la compression, le stockage d'objets dans le référentiel et les éléments internes de fusion sont en dehors de cette voie et de l'ensemble de preuves. L’article omet également la chronologie historique demandée plutôt que de la remplir de mémoire. Il est préférable de manquer une affirmation plutôt que d’en publier une non vérifiée.

Pour ces sujets, collectez les spécifications principales et les sources des systèmes décrits. Ne déduisez pas un format de fichier à partir d’une similarité visuelle ou un algorithme à partir du mot « minimal ». La configuration de ToolAcre utilise ce mot, tandis que l'implémentation fournit le mécanisme exact qui le qualifie.

À retenir : cinquante ans d'une bonne idée – résume la lignée et note que la comparaison de texte de ToolAcre applique le même modèle basé sur une ligne dans un onglet de navigateur

La leçon durable est méthodologique : séparer l’histoire de la mise en œuvre. Cet outil de navigation prouve le fractionnement de ligne normalisé, la reconstruction LCS, les options explicites, une limite de ligne différente et le rendu local. Cela ne prouve pas qui a inventé les conventions environnantes ni pourquoi.

Utilisez l'itinéraire pour inspecter le texte actuel et utiliser des sources primaires pour raconter le passé. Cette limite peut rendre l’article historique moins radical, mais elle rend chaque déclaration incluse vérifiable. La précision bat une lignée polie assemblée à partir de souvenirs non cités.