fbpx
Wikipedia

Darcs

Darcs is a distributed version control system created by David Roundy. 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.[3] The name is a recursive acronym for Darcs Advanced Revision Control System.[4]

Darcs
Original author(s)David Roundy
Developer(s)Guillaume Hoffmann, et al.
Initial releaseMarch 3, 2003; 21 years ago (2003-03-03)[1]
Stable release
2.16.5[2]  / 20 February 2022; 2 years ago (20 February 2022)
Repository
  • hub.darcs.net/darcs/darcs-reviewed
Written inHaskell
Operating systemUnix, Linux, BSD, Apple macOS, MS Windows
TypeVersion control
LicenseGPL-2.0-or-later
Websitedarcs.net 

Model edit

Darcs treats patches as first-class citizens. For the user, a repository can be seen 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. In many cases patches can be independently transmitted between various repositories.

Many branching, merging, and cherry-picking operations that would require additional commands with snapshot-based systems like Git or Mercurial can be directly done with Darcs with the usual "pull" and "push" commands. In terms of user interface, this means that Darcs has fewer commands. These commands are more interactive: one can choose more precisely which patches they want to exchange with remote repositories.

The patches of a repository are linearly ordered. Darcs automatically calculates whether patches can be reordered (an operation called commutation), and how to do it. These calculations implement a so-called "patch theory".

A Darcs patch can contain changes of the following kinds:

  • line changes,
  • file and directory creation and deletion,
  • file and directory moving,
  • word substitution (typically used in code refactoring, for instance rename all occurrences of "foo" to "bar" in a given file).

The notion of dependency between patches is defined syntactically. Intuitively, a patch B depends on another patch A if A provides the content that B modifies. This means that patches that modify different parts of the code are considered, by default, independent. To address cases when this is not desirable, Darcs enables the user to specify explicit dependencies between patches.

Since version 2.10, Darcs uses patience diff by default.

History edit

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 the conception of the 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. Darcs 2.0 was released in April 2008 and introduced a more robust repository format, as well as a new patch semantic called "darcs-2", aimed at minimizing exponential merge conflicts.[5] The current development strategy focuses on implementing optimizations and adding new features, while maintaining the same repository format.

Shortcomings edit

Darcs has been criticized on the grounds of performance.[6][7] One of the most notable challenges related to the merge algorithm in Darcs 1.x, which could do exponential work to merge some conflicts. Although it was not completely corrected in Darcs 2,[8] the frequency of exponential merges has been reduced. Bugs still remain in which merging of recursive conflicts fails.[9]

The revision control system Pijul[10] solves those complexity problems by making conflicts and their resolutions first class citizens which can commute with other changes.

See also edit

References edit

  1. ^ "Changelog for darcs". Hackage. Retrieved 2018-06-24.
  2. ^ Error: Unable to display the reference properly. See the documentation for details.
  3. ^ 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.’
  4. ^ Roundy, David (2008-10-21), "prefer recursive acronymn (sic) to embarrassing one", Darcs (Commit), Darcs Hub.
  5. ^ "Two", Darcs
  6. ^ Marlow, Simon (March 7, 2007), "Current status of Darcs", Darcs users (mailing list), OSUOSL.
  7. ^ Fendt, Robert (January 9, 2009), "DVCS Round-Up: One System to Rule Them All?", , vol. 1, Linux Foundation, archived from the original on 2009-02-28.
  8. ^ "ConflictsFAQ", Wiki, Darcs.
  9. ^ "Issue 1520 Irrefutable pattern failed for pattern Data.Maybe.Just a2", Bug Tracker, Darcs.
  10. ^ Pijul web site
  • Roundy, David (2005), "Darcs: distributed version management in Haskell", Proceedings of the 2005 ACM SIGPLAN workshop on Haskell, Tallinn, Estonia, pp. 1–4, doi:10.1145/1088348.1088349, ISBN 1-59593-071-X, S2CID 13932981

External links edit

  • Official website  
  • Homotopical patch theory

darcs, distributed, version, control, system, created, david, roundy, features, include, ability, choose, which, changes, accept, from, other, repositories, interaction, with, either, other, local, disk, repositories, remote, repositories, http, email, unusual. Darcs is a distributed version control system created by David Roundy 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 3 The name is a recursive acronym for Darcs Advanced Revision Control System 4 DarcsOriginal author s David RoundyDeveloper s Guillaume Hoffmann et al Initial releaseMarch 3 2003 21 years ago 2003 03 03 1 Stable release2 16 5 2 20 February 2022 2 years ago 20 February 2022 Repositoryhub wbr darcs wbr net wbr darcs wbr darcs reviewedWritten inHaskellOperating systemUnix Linux BSD Apple macOS MS WindowsTypeVersion controlLicenseGPL 2 0 or laterWebsitedarcs wbr net Contents 1 Model 2 History 3 Shortcomings 4 See also 5 References 6 External linksModel editDarcs treats patches as first class citizens For the user a repository can be seen 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 In many cases patches can be independently transmitted between various repositories Many branching merging and cherry picking operations that would require additional commands with snapshot based systems like Git or Mercurial can be directly done with Darcs with the usual pull and push commands In terms of user interface this means that Darcs has fewer commands These commands are more interactive one can choose more precisely which patches they want to exchange with remote repositories The patches of a repository are linearly ordered Darcs automatically calculates whether patches can be reordered an operation called commutation and how to do it These calculations implement a so called patch theory A Darcs patch can contain changes of the following kinds line changes file and directory creation and deletion file and directory moving word substitution typically used in code refactoring for instance rename all occurrences of foo to bar in a given file The notion of dependency between patches is defined syntactically Intuitively a patch B depends on another patch A if A provides the content that B modifies This means that patches that modify different parts of the code are considered by default independent To address cases when this is not desirable Darcs enables the user to specify explicit dependencies between patches Since version 2 10 Darcs uses patience diff by default History editDarcs 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 the conception of the 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 Darcs 2 0 was released in April 2008 and introduced a more robust repository format as well as a new patch semantic called darcs 2 aimed at minimizing exponential merge conflicts 5 The current development strategy focuses on implementing optimizations and adding new features while maintaining the same repository format Shortcomings editDarcs has been criticized on the grounds of performance 6 7 One of the most notable challenges related to the merge algorithm in Darcs 1 x which could do exponential work to merge some conflicts Although it was not completely corrected in Darcs 2 8 the frequency of exponential merges has been reduced Bugs still remain in which merging of recursive conflicts fails 9 The revision control system Pijul 10 solves those complexity problems by making conflicts and their resolutions first class citizens which can commute with other changes See also edit nbsp Free and open source software portalComparison of version control softwareReferences edit Changelog for darcs Hackage Retrieved 2018 06 24 Error Unable to display the reference properly See the documentation for details 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 Roundy David 2008 10 21 prefer recursive acronymn sic to embarrassing one Darcs Commit Darcs Hub Two Darcs Marlow Simon March 7 2007 Current status of Darcs Darcs users mailing list OSUOSL Fendt Robert January 9 2009 DVCS Round Up One System to Rule Them All Developer Network vol 1 Linux Foundation archived from the original on 2009 02 28 ConflictsFAQ Wiki Darcs Issue 1520 Irrefutable pattern failed for pattern Data Maybe Just a2 Bug Tracker Darcs Pijul web site Roundy David 2005 Darcs distributed version management in Haskell Proceedings of the 2005 ACM SIGPLAN workshop on Haskell Tallinn Estonia pp 1 4 doi 10 1145 1088348 1088349 ISBN 1 59593 071 X S2CID 13932981External links edit nbsp Wikibooks has a book on the topic of Understanding Darcs Official website nbsp Homotopical patch theory Retrieved from https en wikipedia org w index php title Darcs amp oldid 1214463485, wikipedia, wiki, book, books, library,

article

, read, download, free, free download, mp3, video, mp4, 3gp, jpg, jpeg, gif, png, picture, music, song, movie, book, game, games.