diferencia


En informática , la utilidad diff es una herramienta de comparación de datos que calcula y muestra las diferencias entre los contenidos de los archivos. A diferencia de las nociones de distancia de edición utilizadas para otros fines, diff está orientado a líneas en lugar de a caracteres, pero es como la distancia de Levenshtein en el sentido de que intenta determinar el conjunto más pequeño de eliminaciones e inserciones para crear un archivo a partir del otro. La utilidad muestra los cambios en uno de varios formatos estándar, de modo que tanto los humanos como las computadoras pueden analizar los cambios y usarlos para aplicar parches .

Normalmente, diff se usa para mostrar los cambios entre dos versiones del mismo archivo. Las implementaciones modernas también admiten archivos binarios . [1] La salida se llama "diferencia" o parche , ya que la salida se puede aplicar con el parche del programa Unix . La salida de utilidades de comparación de archivos similares también se denomina "diff"; Al igual que el uso de la palabra " grep " para describir el acto de búsqueda, la palabra diff se convirtió en un término genérico para calcular la diferencia de datos y sus resultados. [2] El estándar POSIX especifica el comportamiento de "diff" y "patch"utilidades y sus formatos de archivo.[3]

diff se desarrolló a principios de la década de 1970 en el sistema operativo Unix, que estaba surgiendo de Bell Labs en Murray Hill, Nueva Jersey. La primera versión publicada se envió con la 5.ª edición de Unix en 1974 [ cita requerida ] y fue escrita por Douglas McIlroy y James Hunt . Esta investigación se publicó en un artículo de 1976 coescrito con James W. Hunt, quien desarrolló un prototipo inicial de diff . [4] El algoritmo descrito en este documento se conoció como el algoritmo de Hunt-Szymanski .

El trabajo de McIlroy fue precedido e influenciado por el programa de comparación de Steve Johnson en GECOS y el programa de prueba de Mike Lesk . Proof también se originó en Unix y, como diff , produjo cambios línea por línea e incluso usó paréntesis angulares (">" y "<") para presentar inserciones y eliminaciones de línea en la salida del programa. Sin embargo, las heurísticas utilizadas en estas primeras aplicaciones se consideraron poco fiables. La utilidad potencial de una herramienta diff provocó que McIlroy investigara y diseñara una herramienta más robusta que pudiera usarse en una variedad de tareas, pero que funcionara bien en las limitaciones de procesamiento y tamaño del PDP-11.hardware de . Su enfoque del problema fue el resultado de la colaboración con personas de Bell Labs, incluidos Alfred Aho , Elliot Pinson, Jeffrey Ullman y Harold S. Stone.

En el contexto de Unix, el uso del editor de línea ed proporcionó a diff la capacidad natural de crear "guiones de edición" utilizables por máquina. Estos scripts de edición, cuando se guardan en un archivo, pueden, junto con el archivo original, ser reconstituidos por ed en el archivo modificado en su totalidad. Esto redujo en gran medida el almacenamiento secundario necesario para mantener varias versiones de un archivo. McIlroy consideró escribir un posprocesador para diff en el que se pudiera diseñar e implementar una variedad de formatos de salida, pero le pareció más frugal y más simple hacer que diff fuera responsable de generar la sintaxis y la entrada de orden inverso aceptada por el comando ed .

A fines de 1984, Larry Wall creó una utilidad separada, patch , y publicó su código fuente en los grupos de noticias mod.sources y net.sources . [5] [6] [7] Este programa generalizó y amplió la capacidad de modificar archivos con salida de diff .