Darcs

Το darcs είναι ένα σύστημα κατανεμημένου ελέγχου εκδόσεων που δημιουργήθηκε από τον David Roundy και σχεδιάστηκε για να αντικαταστήσει τα κεντρικά συστήματα ελέγχου πηγαίου κώδικα όπως το CVS και το Subversion. Δύο ιδιαίτερα χαρακτηριστικά της σχεδίασής του το διαχωρίζουν από το CVS. Κάθε αντίγραφο του δέντρου πηγαίου κώδικα λειτουργεί σαν πλήρες αποθετήριο (repository), επιτρέποντας τη συντήρηση διαφορετικών εκδόσεων σε διαφορετικές τοποθεσίες. Τα patches είναι καθολικά στο repository και μπορούν υπό προϋποθέσεις να αναδιαταχτούν, σύμφωνα με τη "θεωρία των patches" του εγχειρήματος.

Το όνομα είναι αναδρομικό αρκτικόλεξο της αγγλικής φράσης Darcs Advanced Revision Control System, αλλά συνήθως γράφεται με πεζά γράμματα (darcs), αν δεν βρίσκεται στην αρχή πρότασης.

Στη βασική του χρήση, ένας χρήστης μπορεί να πάρει (get) ένα αντίγραφο ενός repository, να κάνει κάποιες αλλαγές, να καταγράψει (record) τις αλλαγές αυτές, να τραβήξει (pull) αλλαγές από άλλα repositories, και στο τέλος να σπρώξει (push) ή να στείλει (send) αλλαγές σε άλλα repositories. Για να αρχίσει ένα νέο repository, ο χρήστης μπορεί να αρχικοποιήσει (init) έναν οποιοδήποτε φάκελο. 

Τα άλλα repositories μπορούν να είναι τοπικοί φάκελοι, ή να είναι προσβάσιμα μέσω των πρωτοκόλλων SSH ή HTTP. Οι αλλαγές μπορούν να υποβληθούν μέσω ηλεκτρονικού ταχυδρομείου σε περιπτώσεις που ο χρήστης δεν έχει δικαίωμα εγγραφής σε ένα άλλο repository.

Το darcs είναι γραμμένο στη γλώσσα συναρτησιακού προγραμματισμού Haskell - ανάμεσα σε άλλα εργαλεία χρησιμοποιεί το QuickCheck"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..

Οι πιο πολλές εντολές του darcs είναι διαδραστικές, π.χ. επιτρέπουν στο χρήστη να υποβάλλει αλλαγές ή να τραβήξει συγκεκριμένα αρχεία επιλεκτικά. Αυτό το χαρακτηριστικό έχει σχεδιαστεί ώστε να ενθαρρύνει περισσότερη λεπτομέρεια στη δημιουργία patches. Λόγω αυτής της διαδραστικότητας, το darcs έχει λιγότερες ξεχωριστές εντολές σε σχέση με άλλα αντίστοιχα συστήματα ελέγχου εκδόσεων.

Μοντέλο

Σε αντίθεση με άλλα συστήματα ελέγχου εκδόσεων, που επιτρέπουν στο χρήστη να βλέπει την ιστορία του δέντρου του πηγαίου κώδικα σαν μια σειρά από στιγμιότυπα προς τα πίσω στο χρόνο, ένα δέντρο πηγαίου κώδικα κατά το darcs μοντελοποιείται σαν ένα σύνολο από patches, το καθένα από τα οποία δεν έχει υποχρεωτικά κάποια σειρά σε σχέση με τα άλλα, δηλαδή το σύνολο των patches είναι μερικώς διατεταγμένο. Μια συγκεκριμένη έκδοση του δέντρου πηγαίου κώδικα αντιστοιχεί σε ένα συγκεκριμένο σύνολο από patches. Αυτό το σύνολο ίσως να έχει υπάρξει στο παρελθόν αλλά αυτό δεν είναι αναγκαίο, δηλαδή μια έκδοση του δέντρου δεν είναι υποχρεωτικό να είναι ένα προηγούμενο στιγμιότυπό του στον χρόνο.

Προβλήματα

Έχει ασκηθεί κριτική στο darcs για προβλήματα απόδοσης.Simon Marlow, Re: current status of darcs, darcs-users discussion group, March 7, 2007Robert Fendt, DVCS Round-Up: One System to Rule Them All?--Part 1 , Linux Foundation Developer Network, January 9, 2009  Το χειρότερο από αυτά τα προβλήματα αφορούσε τον αλγόριθμο συγχώνευσης (merge) του Darcs 1.x, ο οποίος, στη χειρότερη περίπτωση, μπορεί να χρειαζόταν εκθετικό χρόνο για να χειριστεί κάποιες συγκρούσεις (conflicts). Αν και το θέμα δε διορθώθηκε πλήρως στο Darcs 2,ConflictsFAQ, Darcs Wiki έχουν ελαχιστοποιηθεί αυτές οι εκθετικές περιπτώσεις. Δυστυχώς παραμένουν κάποια σφάλματα στη συγχώνευση αναδρομικών συγκρούσεων με αποτέλεσμα την αποτυχία της λειτουργίας της συγχώνευσης (π.χ., Issue 1520 Irrefutable pattern failed for pattern Data.Maybe.Just a2, Darcs Bug Tracker).

Ιστορία
Το 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.

 Παραπομπές 

 Δείτε επίσης 
 diff / patch, για απευθείας χειρισμό patches μεταξύ αρχείων πηγαίου κώδικα

 Περαιτέρω διάβασμα 


 Εξωτερικοί σύνδεσμοι 

Σελίδα του Darcs  
Εγχειρίδιο του Darcs  
Συνέντευξη με τον δημιουργό του darcs πάνω στην προέλευση του λογισμικού και στις ιδέες του 

Κατηγορία:Ελεύθερο λογισμικό