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

 Σε αντίθεση με άλλα συστήματα ελέγχου εκδόσεων, που επιτρέπουν στο χρήστη να βλέπει την ιστορία του δέντρου του πηγαίου κώδικα σαν μια σειρά από στιγμιότυπα προς τα πίσω στο χρόνο, ένα δέντρο πηγαίου κώδικα κατά το darcs μοντελοποιείται σαν ένα σύνολο από patches, το καθένα από τα οποία δεν έχει υποχρεωτικά κάποια σειρά σε σχέση με τα άλλα, δηλαδή το σύνολο των patches είναι μερικώς διατεταγμένο. Μια συγκεκριμένη έκδοση του δέντρου πηγαίου κώδικα αντιστοιχεί σε ένα συγκεκριμένο σύνολο από patches. Αυτό το σύνολο ίσως να έχει υπάρξει στο παρελθόν αλλά αυτό δεν είναι αναγκαίο, δηλαδή μια έκδοση του δέντρου δεν είναι υποχρεωτικό να είναι ένα προηγούμενο στιγμιότυπό του στον χρόνο. Έχει ασκηθεί κριτική στο darcs για προβλήματα απόδοσης. Το χειρότερο από αυτά τα προβλήματα αφορούσε τον αλγόριθμο συγχώνευσης (merge) του Darcs 1.x, ο οποίος, στη χειρότερη περίπτωση, μπορεί να χρειαζόταν εκθετικό χρόνο για να χειριστεί κάποιες συγκρούσεις (conflicts). Αν και το θέμα δε διορθώθηκε πλήρως στο Darcs 2, έχουν ελαχιστοποιηθεί αυτές οι εκθετικές περιπτώσεις. Δυστυχώς παραμένουν κάποια σφάλματα στη συγχώνευση αναδρομικών συγκρούσεων με αποτέλεσμα την αποτυχία της λειτουργίας της συγχώνευσης (π.χ., ). Το 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 μεταξύ αρχείων πηγαίου κώδικα 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 πάνω στην προέλευση του λογισμικού και στις ιδέες του (Αγγλικά)