Darcs - Darcs

Darcs
logotipo de darcs
Autor (es) original (es) David Roundy
Desarrollador (es) Guillaume Hoffmann y col.
Versión inicial 3 de marzo de 2003 ; Hace 18 años ( 2003-03-03 )
Lanzamiento estable
2.16.4 / 20 de mayo de 2021 ; hace 4 meses (20 de mayo de 2021 )
Repositorio
Escrito en Haskell
Sistema operativo Unix , Linux , BSD , Apple macOS , MS Windows
Escribe Control de versiones
Licencia GPL-2.0 o posterior
Sitio web darcs .net Edita esto en Wikidata

Darcs es un sistema de control de versiones distribuido creado por David Roundy . Las características clave incluyen la capacidad de elegir qué cambios aceptar de otros repositorios, interacción con otros repositorios locales (en disco) o repositorios remotos a través de SSH , HTTP o correo electrónico, y una interfaz inusualmente interactiva. Los desarrolladores también enfatizan el uso de herramientas de software avanzadas para verificar la corrección: el sistema de tipo expresivo del lenguaje de programación funcional Haskell refuerza algunas propiedades, y las pruebas aleatorias a través de QuickCheck verifican muchas otras. El nombre es un acrónimo recursivo de Darcs Advanced Revision Control System .

Modelo

Darcs trata a los parches como ciudadanos de primera clase . Para el usuario, un repositorio puede verse como un conjunto de parches, donde cada parche no está necesariamente ordenado con respecto a otros parches, es decir, el conjunto de parches es solo un conjunto parcialmente ordenado . En muchos casos, los parches se pueden transmitir de forma independiente entre varios repositorios.

Muchas operaciones de ramificación, fusión y selección que requerirían comandos adicionales con sistemas basados ​​en instantáneas como Git o Mercurial se pueden realizar directamente con Darcs con los comandos habituales "pull" y "push". En términos de interfaz de usuario, esto significa que Darcs tiene menos comandos. Estos comandos son más interactivos: uno puede elegir con más precisión qué parches desea intercambiar con repositorios remotos.

Los parches de un repositorio están ordenados linealmente. Darcs calcula automáticamente si los parches se pueden reordenar (una operación llamada conmutación) y cómo hacerlo. Estos cálculos implementan la llamada "teoría de parches".

Un parche de Darcs puede contener cambios de los siguientes tipos:

  • cambios de línea,
  • creación y eliminación de archivos y directorios,
  • movimiento de archivos y directorios,
  • sustitución de palabras (normalmente utilizada en la refactorización de código, por ejemplo, cambiar el nombre de todas las apariciones de "foo" a "bar" en un archivo determinado).

La noción de dependencia entre parches se define sintácticamente. Intuitivamente, un parche B depende de otro parche A si A proporciona el contenido que B modifica. Esto significa que los parches que modifican diferentes partes del código se consideran, por defecto, independientes. Para abordar los casos en los que esto no es deseable, Darcs permite al usuario especificar dependencias explícitas entre parches.

Desde la versión 2.10, Darcs usa paciencia diff por defecto.

Historia

Darcs evolucionó a partir de los esfuerzos de David Roundy para diseñar un nuevo formato de parche para GNU arch en junio de 2002. Estas discusiones no llevaron a ningún código comprometido con Arch, pero sí llevaron a la concepción de la teoría de parches. Después de escribir una versión inicial de Darcs en C ++ , la versión de Haskell se escribió en otoño de 2002 y se lanzó al público en abril de 2003. Darcs 2.0 se lanzó en abril de 2008 e introdujo un formato de repositorio más robusto, así como una nueva semántica de parche llamada "darcs-2", cuyo objetivo es minimizar los problemas de fusión exponencial. La estrategia de desarrollo actual se centra en implementar optimizaciones y agregar nuevas funciones, manteniendo el mismo formato de repositorio.

Defectos

Darcs ha sido criticado por su desempeño. Uno de los problemas más notables estaba relacionado con el algoritmo de fusión en Darcs 1.x, que podría hacer un trabajo exponencial para fusionar algunos conflictos. Aunque el problema no se corrigió por completo en Darcs 2, se ha reducido la frecuencia de fusiones exponenciales. Aún quedan errores en los que falla la combinación de conflictos recursivos.

Ver también

Referencias

enlaces externos