Herramientas de desarrollo · Comparación de texto
Una breve historia de las diferencias de Unix: Hunt, McIlroy y el modelo basado en líneas
· Antecedentes
diferencia de texto algoritmos historial de software
Los rastros difieren desde los Laboratorios Bell en la década de 1970 hasta las herramientas actuales, lo que explica por qué comparar texto por líneas se convirtió en el estándar y cómo los algoritmos posteriores lo refinaron.
Por qué cada imagen de "lo que cambió" se parece a las diferencias de Unix: comienza con la observación de que los sitios de alojamiento de códigos, las herramientas de revisión y las herramientas de navegación heredan el mismo modelo.
Las pantallas de revisión modernas a menudo comparten una gramática visual de contexto, eliminaciones y adiciones sin cambios. Es tentador convertir ese parecido en una historia completa del linaje, pero este repositorio es una evidencia de la implementación actual de ToolAcre en lugar de un archivo principal de la historia de Unix.
Por lo tanto, el artículo seguro distingue dos tareas. Explica en detalle lo que prueba la presente fuente y señala que los nombres históricos, las fechas y los motivos del libro requieren referencias autorizadas externas. La familiaridad no es una cita, especialmente para la autoría de algoritmos.
Bell Labs y el problema de comparar archivos: describe la necesidad inicial de Unix de comparar archivos fuente y el trabajo de Douglas McIlroy y James Hunt.
El esquema atribuye los primeros trabajos a las figuras de Bell Labs. Ninguno de los cuatro archivos fuente de Text diff documenta esa historia, y la tarea prohíbe afirmaciones inventadas o no citadas. En consecuencia, este módulo no repite detalles biográficos, citas o fechas como hechos establecidos.
Un futuro artículo histórico debe citar artículos, manuales o archivos institucionales directamente. Hasta que esas fuentes sean parte del conjunto de evidencia, la corrección es explícita: ToolAcre puede demostrar un modelo de diferencia de líneas hoy, pero no puede autenticar cada paso en la historia del origen del modelo.
La autoría de Bell Labs y la historia temprana de Unix necesitan fuentes primarias externas que no están presentes en este repositorio
El código actual se divide según convenciones de nueva línea normalizadas y compara matrices de líneas. Ese hecho explica la granularidad actual. No prueba que los teletipos o las limitaciones de almacenamiento hayan causado una elección de diseño histórico, porque no se importa ningún material histórico a la implementación.
La distinción importa más allá de la erudición. “Esta herramienta funciona en líneas” es reproducible mediante pruebas. “Las líneas fueron elegidas por esta razón histórica” es una afirmación causal que necesita documentos de la época. Una buena redacción técnica no utiliza el código actual como evidencia retroactiva de intenciones pasadas.
El repositorio prueba que ToolAcre compara líneas; no prueba por qué los sistemas históricos los eligieron
`toUnifiedText` emite etiquetas `---` y `+++` seguidas de cada fila con el prefijo espacio, menos o más. Tiene forma de parche y es útil para descargar, pero no contiene encabezados de trozos `@@`. Llamarlo diferenciación unificada completa exageraría el formato implementado aquí.
La ruta tampoco genera formatos normales o de contexto. Puede que valga la pena explicar la evolución histórica entre esos formatos con manuales externos, sin embargo, el resultado enviado admite una descripción más limitada: un flujo de fila completa legible con marcadores familiares y etiquetas proporcionadas por la persona que llama.
ToolAcre exporta una secuencia en forma de parche, no formatos de diferencias históricos completos
El esquema dice que los motores modernos usan Myers, pero ToolAcre no. Su encabezado de archivo nombra la programación dinámica LCS simple y documenta el tiempo y la memoria O(n·m) en el otro medio. La implementación llena una tabla `Uint32Array` y reconstruye una ruta a través de ella.
Esta no es una corrección cosmética. Los nombres de los algoritmos conllevan una complejidad específica y un comportamiento vinculado. El recorte de prefijos y sufijos más un límite de línea 2,000 hacen que este diseño sea adecuado para diferencias pegadas limitadas. Los lectores no deberían transferir una afirmación de complejidad de Myers al código con una matriz cuadrática.
ToolAcre usa programación dinámica LCS simple, no Myers
La comparación basada en líneas aún no puede identificar la equivalencia semántica, los bloques movidos o la intención de formato. Esas limitaciones se derivan directamente de las claves de cadena ordenadas. Un compilador puede considerar dos fragmentos fuente equivalentes mientras que una línea diff informa reemplazos, o lo contrario bajo una normalización agresiva.
El modelo original sigue siendo útil precisamente porque su resultado es inspeccionable. Cada fila tiene texto, tipo y números de línea específicos de cada lado. El revisor puede no estar de acuerdo con una alineación y al mismo tiempo tener en cuenta cada línea, lo cual es más difícil con una puntuación opaca de "significado cambiado".
Lo que esto no cubre: comparación binaria, compresión delta y controles internos de versiones.
Los deltas binarios, la compresión, el almacenamiento de objetos del repositorio y los elementos internos de fusión están fuera de esta ruta y del conjunto de pruebas. El artículo también omite la cronología histórica solicitada en lugar de llenarla de memoria. Es preferible omitir un reclamo que publicar uno no verificado.
Para esos temas, recopile las especificaciones primarias y las fuentes de los sistemas que se describen. No infieras un formato de archivo a partir de una similitud visual ni un algoritmo a partir de la palabra "mínimo". La configuración de ToolAcre usa esa palabra, mientras que la implementación proporciona el mecanismo exacto que la califica.
Conclusión: cincuenta años de una buena idea: resume el linaje y señala que la comparación de texto de ToolAcre aplica el mismo modelo basado en líneas en una pestaña del navegador.
La lección duradera es metodológica: separar la historia de la implementación. Esta herramienta de navegador demuestra división de líneas normalizada, reconstrucción LCS, opciones explícitas, un límite de línea diferente y representación local. No prueba quién inventó las convenciones circundantes ni por qué.
Utilice la ruta para inspeccionar el texto actual y utilice fuentes primarias para contar el pasado. Ese límite puede hacer que el artículo histórico sea menos amplio, pero hace que cada declaración incluida sea auditable. La precisión supera a un linaje pulido ensamblado a partir de recuerdos no citados.