Darcs

From Wikipedia, the free encyclopedia
Jump to: navigation, search
Darcs
darcs logo
Developer(s) Eric Kow (and others)
Initial release March 3, 2003 (2003-03-03)[1]
Stable release 2.5.2 / March 14, 2011; 10 months ago (2011-03-14)
Written in Haskell
Operating system Unix, GNU/Linux, BSD, Mac OS X, Windows
Type Revision control
License GPL
Website darcs.net

Darcs is a distributed revision control system created by David Roundy; it was designed to replace traditional, centralized source control systems such as CVS and Subversion. Key features include the ability to choose which changes to accept from other repositories, interaction with either other local (on-disk) repositories or remote repositories via SSH, HTTP, or email, and an unusually interactive interface. The developers also emphasize the use of advanced software tools for verifying correctness: the expressive type system of the functional programming language Haskell enforces some properties, and randomized testing via QuickCheck verifies many others[2]. The name is usually sentence-cased, and is a recursive acronym for Darcs Advanced Revision Control System[3].

Contents

[edit] Model

Unlike most SCM software, which allows the user to view a source tree history as series of snapshots going back in time, a darcs source tree is modelled as a set of patches, where each patch is not necessarily ordered with respect to other patches i.e. the set of patches is only a partially ordered set. A particular version of the source tree corresponds to a particular set of patches; this set of patches may or may not have existed at some other point in time.

[edit] Shortcomings

Darcs has been criticized on the grounds of performance.[4][5] The worst of these issues was the Darcs 1.x merge algorithm that, in the worst case, could do exponential work to merge some conflicts. Although the issue was not completely corrected in Darcs 2,[6] exponential merges have been minimized. Unfortunately, bugs still remain in which the merging of recursive conflicts fails[7].

[edit] History

Darcs evolved out of David Roundy's efforts to design a new patch format for GNU arch in June 2002. These discussions didn't lead to any code being committed to arch, but did lead to his theory of patches. After writing an initial version of darcs in C++, the Haskell version was written in Autumn 2002 and released to the public in April 2003. Version 2.5 contains many improvements over the 2.4 series. Most notable are the performance improvements in record and pull and the --bisect option for trackdown.

[edit] Related

A related project called Camp ("Commute and merge patches") attempts to develop Darcs's patch algebra more formally, including the use of Coq to prove the correctness of some of its aspects. Camp remains close to the Darcs project and the authors expect the two projects to merge again once Camp is more mature.

[edit] See also

[edit] References

  1. ^ Darcs changelog
  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." From page 2 of David Roundy 2005.
  3. ^ Commit in which David changes the acronym's meaning
  4. ^ Simon Marlow, Re: current status of darcs, darcs-users discussion group, March 7, 2007
  5. ^ Robert Fendt, DVCS Round-Up: One System to Rule Them All?--Part 1, Linux Foundation Developer Network, January 9, 2009
  6. ^ ConflictsFAQ, Darcs Wiki
  7. ^ Issue 1520 Irrefutable pattern failed for pattern Data.Maybe.Just a2, Darcs Bug Tracker

[edit] External links

Personal tools
Namespaces
Variants
Actions
Navigation
Interaction
Toolbox
Print/export
Languages