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. [2] El nombre es un acrónimo recursivo.para el sistema de control de revisión avanzado Darcs . [3]
Autor (es) original (es) | David Roundy |
---|---|
Desarrollador (es) | Guillaume Hoffmann y col. |
Versión inicial | 3 de marzo de 2003 [1] |
Lanzamiento estable | 2.16.4 / 20 de mayo de 2021 [1] |
Repositorio | |
Escrito en | Haskell |
Sistema operativo | Unix , Linux , BSD , Apple macOS , MS Windows |
Tipo | Control de versiones |
Licencia | GNU GPL |
Sitio web | darcs |
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. [4] La estrategia de desarrollo actual se centra en implementar optimizaciones y agregar nuevas funciones, mientras se mantiene el mismo formato de repositorio.
Defectos
Darcs ha sido criticado por su desempeño. [5] [6] 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ó completamente en Darcs 2, [7] la frecuencia de fusiones exponenciales se ha reducido. Aún quedan errores en los que falla la combinación de conflictos recursivos. [8]
Ver también
Referencias
- ^ a b "Registro de cambios para darcs" . Hackage . Consultado el 24 de junio de 2018 .
- ^ Roundy 2005 , p. 2: 'Uno de los problemas que tuve con los darcs iniciales de C ++ fue que no tenía código de prueba unitaria. Dos semanas después del primer registro de darcs, comencé a usar QuickCheck para probar las funciones del parche, y el mismo día solucioné un error que fue descubierto por QuickCheck. QuickCheck hace que sea muy fácil definir las propiedades que deben tener las funciones, que luego se prueban con datos generados aleatoriamente '.
- ^ Roundy, David (2008-10-21), "prefiere acrónimos recursivos (sic) a uno vergonzoso", Darcs (Commit), Darcs Hub.
- ^ "Dos", Darcs
- ^ Marlow, Simon (7 de marzo de 2007), "Estado actual de Darcs", usuarios de Darcs (lista de correo), OSUOSL.
- ^ Fendt, Robert (9 de enero de 2009), "DVCS Round-Up: One System to Rule to All?", Developer Network , 1 , Linux Foundation, archivado desde el original el 28 de febrero de 2009.
- ^ "ConflictsFAQ", Wiki , Darcs.
- ^ "Problema 1520 Error en el patrón irrefutable para los datos del patrón. Tal vez. Solo a2", Bug Tracker , Darcs.
- Roundy, David (2005), "Darcs: gestión de versiones distribuidas en Haskell", Actas del taller ACM SIGPLAN de 2005 sobre Haskell , Tallin, Estonia, págs. 1–4, doi : 10.1145 / 1088348.1088349 , ISBN 1-59593-071-X, S2CID 13932981
enlaces externos
- Página web oficial