Darcs
![]() | |
Γενικά | |
---|---|
Ημερ. Δημιουργίας | 3 Μάρτιος 2003 |
Είδος | κατανεμημένο σύστημα ελέγχου εκδόσεων,ελεύθερο λογισμικό |
Διανομή | |
Έκδοση | 2.18.2 (24 Μάρτιος 2024)[1] |
Λειτουργικά | Ανεξάρτητο πλατφόρμας |
Ανάπτυξη | |
Υπευθ. ανάπτυξης | David Roundy |
Γραμμένο σε | Haskell |
Άδεια χρήσης | GPLv2+ |
Σύνδεσμοι | |
Επίσημος ιστότοπος | |
http://darcs.net/ | |
Αποθετήριο κώδικα | |
http://hub.darcs.net/darcs/darcs-reviewed |
Τοdarcsείναι ένα σύστημακατανεμημένου ελέγχου εκδόσεωνπου δημιουργήθηκε από τον David Roundy και σχεδιάστηκε για να αντικαταστήσει τα κεντρικά συστήματα ελέγχουπηγαίου κώδικαόπως τοCVSκαι τοSubversion.Δύο ιδιαίτερα χαρακτηριστικά της σχεδίασής του το διαχωρίζουν από το CVS. Κάθε αντίγραφο του δέντρου πηγαίου κώδικα λειτουργεί σαν πλήρες αποθετήριο (repository), επιτρέποντας τη συντήρηση διαφορετικών εκδόσεων σε διαφορετικές τοποθεσίες. Τα patches είναι καθολικά στο repository και μπορούν υπό προϋποθέσεις να αναδιαταχτούν, σύμφωνα με τη"θεωρία των patches"του εγχειρήματος.
Το όνομα είναι αναδρομικό αρκτικόλεξο της αγγλικής φράσηςDarcs Advanced Revision Control System[2],αλλά συνήθως γράφεται με πεζά γράμματα (darcs), αν δεν βρίσκεται στην αρχή πρότασης.
Στη βασική του χρήση, ένας χρήστης μπορεί να πάρει (get) ένα αντίγραφο ενός repository, να κάνει κάποιες αλλαγές, να καταγράψει (record) τις αλλαγές αυτές, να τραβήξει (pull) αλλαγές από άλλα repositories, και στο τέλος να σπρώξει (push) ή να στείλει (send) αλλαγές σε άλλα repositories. Για να αρχίσει ένα νέο repository, ο χρήστης μπορεί να αρχικοποιήσει (init) έναν οποιοδήποτε φάκελο.
Τα άλλα repositories μπορούν να είναι τοπικοί φάκελοι, ή να είναι προσβάσιμα μέσω των πρωτοκόλλωνSSHήHTTP.Οι αλλαγές μπορούν να υποβληθούν μέσω ηλεκτρονικού ταχυδρομείου σε περιπτώσεις που ο χρήστης δεν έχει δικαίωμα εγγραφής σε ένα άλλο repository.
Το darcs είναι γραμμένο στηγλώσσα συναρτησιακού προγραμματισμούHaskell- ανάμεσα σε άλλα εργαλεία χρησιμοποιεί τοQuickCheck[3].
Οι πιο πολλές εντολές του darcs είναι διαδραστικές, π.χ. επιτρέπουν στο χρήστη να υποβάλλει αλλαγές ή να τραβήξει συγκεκριμένα αρχεία επιλεκτικά. Αυτό το χαρακτηριστικό έχει σχεδιαστεί ώστε να ενθαρρύνει περισσότερη λεπτομέρεια στη δημιουργία patches. Λόγω αυτής της διαδραστικότητας, το darcs έχει λιγότερες ξεχωριστές εντολές σε σχέση με άλλα αντίστοιχα συστήματα ελέγχου εκδόσεων.
Μοντέλο
[Επεξεργασία|επεξεργασία κώδικα]Σε αντίθεση με άλλα συστήματα ελέγχου εκδόσεων, που επιτρέπουν στο χρήστη να βλέπει την ιστορία του δέντρου του πηγαίου κώδικα σαν μια σειρά από στιγμιότυπα προς τα πίσω στο χρόνο, ένα δέντρο πηγαίου κώδικα κατά το darcs μοντελοποιείται σαν ένα σύνολο από patches, το καθένα από τα οποία δεν έχει υποχρεωτικά κάποια σειρά σε σχέση με τα άλλα, δηλαδή το σύνολο των patches είναι μερικώς διατεταγμένο. Μια συγκεκριμένη έκδοση του δέντρου πηγαίου κώδικα αντιστοιχεί σε ένα συγκεκριμένο σύνολο από patches. Αυτό το σύνολο ίσως να έχει υπάρξει στο παρελθόν αλλά αυτό δεν είναι αναγκαίο, δηλαδή μια έκδοση του δέντρου δεν είναι υποχρεωτικό να είναι ένα προηγούμενο στιγμιότυπό του στον χρόνο.
Προβλήματα
[Επεξεργασία|επεξεργασία κώδικα]Έχει ασκηθεί κριτική στο darcs για προβλήματα απόδοσης.[4][5]Το χειρότερο από αυτά τα προβλήματα αφορούσε τον αλγόριθμο συγχώνευσης (merge) του Darcs 1.x, ο οποίος, στη χειρότερη περίπτωση, μπορεί να χρειαζόταν εκθετικό χρόνο για να χειριστεί κάποιες συγκρούσεις (conflicts). Αν και το θέμα δε διορθώθηκε πλήρως στο Darcs 2,[6]έχουν ελαχιστοποιηθεί αυτές οι εκθετικές περιπτώσεις. Δυστυχώς παραμένουν κάποια σφάλματα στη συγχώνευση αναδρομικών συγκρούσεων με αποτέλεσμα την αποτυχία της λειτουργίας της συγχώνευσης (π.χ.,[7]).
Ιστορία
[Επεξεργασία|επεξεργασία κώδικα]Το darcs ήταν εξέλιξη της προσπάθειας του David Roundy να σχεδιάσει μια νέα μορφή patch για τοGNU archτον Ιούνιο του 2002. Αυτές οι συζητήσεις δεν κατέληξαν σε κώδικα που να δόθηκε στο arch, αλλά τον οδήγησαν στη θεωρία των patches. Αφού είχε γράψει την αρχική έκδοση του darcs σεC++,η έκδοση σεHaskellγράφτηκε το φθινόπωρο του 2002 και κυκλοφόρησε στο κοινό τον Απρίλιο του 2003.
Σχετικά
[Επεξεργασία|επεξεργασία κώδικα]Ένα σχετικό εγχείρημα που ονομάζεταιCamp( "Commute and merge patches" ) προσπαθεί να αναπτύξει την άλγεβρα των Patches του darcs με πιο τυπικό τρόπο, περιλαμβάνοντας την απόδειξη της ορθότητας κάποιων χαρακτηριστικών με τη χρήσηCoq.Το Camp μένει κοντά στο εγχείρημα darcs και οι δημιουργοί του περιμένουν ότι τα δυο εγχειρήματα θα ενωθούν πάλι όταν ωριμάσει το Camp.
Παραπομπές
[Επεξεργασία|επεξεργασία κώδικα]- ↑«darcs: a distributed, interactive, smart revision control system».
- ↑«Commit in which David changes the acronym's meaning».Αρχειοθετήθηκεαπό το πρωτότυποστις 13 Ιουλίου 2012.Ανακτήθηκε στις 14 Αυγούστου 2010.
- ↑"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.
- ↑Simon Marlow,Re: current status of darcs,darcs-users discussion group, March 7, 2007
- ↑Robert Fendt,DVCS Round-Up: One System to Rule Them All?--Part 1Αρχειοθετήθηκε2009-02-28 στοWayback Machine., Linux Foundation Developer Network, January 9, 2009
- ↑ConflictsFAQ,Darcs Wiki
- ↑Issue 1520 Irrefutable pattern failed for pattern Data.Maybe.Just a2,Darcs Bug Tracker
Δείτε επίσης
[Επεξεργασία|επεξεργασία κώδικα]Περαιτέρω διάβασμα
[Επεξεργασία|επεξεργασία κώδικα]- Roundy, David (2005). «Darcs: distributed version management in Haskell».Proceedings of the 2005 ACM SIGPLAN workshop on Haskell Tallinn, Estonia,pp. 1–4.ISBN 1-59593-071-X.
Εξωτερικοί σύνδεσμοι
[Επεξεργασία|επεξεργασία κώδικα]- Σελίδα του DarcsΑρχειοθετήθηκε2017-12-27 στοWayback Machine.(Αγγλικά)
- Εγχειρίδιο του DarcsΑρχειοθετήθηκε2010-06-11 στοWayback Machine.(Αγγλικά)
- Συνέντευξημε τον δημιουργό του darcs πάνω στην προέλευση του λογισμικού και στις ιδέες του(Αγγλικά)
|