A few days ago I posted, in confusion, about GNU arch, the distributed version control system. My confusion about arch has not subsided yet, but maybe that doesn't matter anymore… after my classes yesterday, I started reading about darcs.
Darcs is a very cleanly-designed distributed version control system, written in Haskell. The implementation language shouldn't matter a whit, of course, and in fact it would be bad if the language is ‘visible’ through the user interface – it isn't. But as a PL nerd, it just thrills me that someone has written a tool in Haskell that is seeing somewhat wide use by non-PL nerds. Same phenomenon with the Unison tool and OCaml language.
[Now if only Standard ML (still my favorite) could get there… but I'll save that for another rant. A necessary (but probably insufficient) condition is that it must be dirt easy to build and install your tool without becoming a PL nerd. It's not acceptable to have to direct would-be users to smlnj.org and have them manually download, configure, and install some big compiler that they'll use for absolutely nothing else. It must be as easy as “fink/apt-get install darcs”. In my case, it was that easy, even though it took my PowerBook all night to build GHC!]
Getting the basic version control stuff working with darcs was far easier than any other system I've seen. Literally, from a cold start, here's all you need:
cd workdir darcs initialize darcs add * darcs recordNo repository to set up, no contemplating where to keep it or figuring out which access method to use, etc. Then I tried basic branching and merging, pushing over SSH and pulling over HTTP, etc., and it was all so simple and beautiful.
Now I just need to try it for real, “in anger.” I understand there may be some scalability issues: some cases where merging doesn't terminate, for example. We'll see how it goes. As I noted last time: VC is a hard problem, so no effective tool can be a bed of roses in every case…