Darcs es un sistema de control de versiones distribuido creado por David Roundy. Las características clave son: la habilidad de escoger que cambios aceptar de otros repositorios, interacción con otros repositorios locales (en disco) o repositorios remotos vía SSH, HTTP o correo electrónico, y una inusual interfaz interactiva. Los desarrolladores también hacen hincapié en el uso de herramientas de software avanzadas para la verificación de la corrección: el sistema de tipo expresivo del lenguaje de programación funcional Haskell hace cumplir algunas propiedades, y las pruebas al azar a través de QuickCheck verifica muchos otros.[2]​ El nombre es un acrónimo recursivo para el sistema de control de versiones avanzada Darcs Advanced Revision Control System.[3]

Darcs
Parte de Software Freedom Conservancy
darcs logo
Información general
Tipo de programa Control de versiones
Desarrollador Guillaume Hoffmann (y otros)
Lanzamiento inicial 3 de marzo de 2003[1]
Licencia GNU GPL
Información técnica
Programado en Haskell
Versiones
Última versión estable 2.10.2 ( 9 de noviembre de 2015)
Enlaces

Modelo

editar

Darcs trata los parches como ciudadanos de primera clase. Para el usuario, un repositorio puede ser visto como un conjunto de parches, donde cada parche no es necesariamente requerido con relación a otros parches es decir, el conjunto de parches es sólo un conjunto parcialmente ordenado. En muchos casos, los parches pueden ser transmitidos de forma independiente entre varios repositorios.

Muchas operaciones de ramificación, fusión y cherry-picking que requieren comandos adicionales con sistemas basadas en snapshots como Git o Mercurial, se pueden hacer directamente con Darcs con los comandos comunes "pull" y "push". En cuanto a la interfaz de usuario, esto significa que Darcs tiene menos comandos. Además estos comandos son más interactivos ya que se puede elegir con más precisión que parches se quiere intercambiar con repositorios remotos.

En el sistema de archivos, 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 la forma de hacerlo. Estos cálculos implementar la llamada "teoría de parches".

Un parche Darcs puede contener cambios de los siguientes tipos:

  • Cambios en las líneas
  • Creación y eliminación de archivos y directorios
  • Movimiento de archivos y directorios
  • Sustitución de palabras (utilizado normalmente en la refactorización de código, por ejemplo, cambiar el nombre de todas las apariciones de "foo" en un archivo determinado)

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

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

Historia

editar

Darcs evolucionaron 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 que se está comprometido con Arch, pero dieron lugar a su teoría de parches. Después de escribir una primera versión de Darcs en C++, la versión Haskell fue escrito en otoño de 2002 y lanzado al público en abril de 2003. Darcs 2.0 ya lanzado en abril de 2008 e introdujo un formato de repositorio más robusto y una nueva semántica de parches llamados darcs-2, con el objetivo de minimizar los problemas de fusión de exponenciales.[4]​ La línea actual de desarrollo contiene muchas optimizaciones y nuevas características, manteniendo el mismo formato de repositorio.

Deficiencias

editar

Darcs ha sido criticado por motivos de rendimiento.[5][6]​ La peor de estas cuestiones fue el algoritmo de fusión de Darcs 1.x que, en el peor de los casos, podría hacer un trabajo exponencial de fusionar algunos conflictos. Aunque el tema no ha sido completamente corregida en Darcs 2,[7]​ las fusiones exponenciales han sido minimizadas. Aún permanecen errores en el que la fusión de los conflictos recurrentes falla.[8]

Referencias

editar
  1. «Changelog», Darcs, archivado desde el original el 26 de septiembre de 2009, consultado el 22 de noviembre de 2015 .
  2. Roundy , 2005, p. 2. : ‘One of the problems I had with the initial C++ darcs was that I had no unit testing code. Within two weeks of the first darcs record, I started using QuickCheck to test the patch functions, and the same day I fixed a bug that was discovered by QuickCheck. QuickCheck makes it very easy to define properties that functions must have, which are then tested with randomly generated data.’
  3. Roundy, David (2008‐10‐21), «changes the acronym's meaning», Darcs (Commit), Joyful, archivado desde el original el 13 de julio de 2012, consultado el 24 de octubre de 2013 ..
  4. «Two», Darcs ..
  5. Marlow, Simon (7 de marzo de 2007), «Current status of Darcs», Darcs users (mailing list), OSUOSL ..
  6. Fendt, Robert (9 de enero de 2009), «DVCS Round-Up: One System to Rule Them All?», Developer Network 1, Linux Foundation, archivado desde el original el 28 de febrero de 2009, consultado el 24 de octubre de 2013 ..
  7. «ConflictsFAQ», Wiki, Darcs ..
  8. «Issue 1520 Irrefutable pattern failed for pattern Data.Maybe.Just a2», Bug Tracker, Darcs ..

Enlaces externos

editar