On Mar 11, 2006, at 1:41 PM, Tom Rushworth wrote:
I've looked at the darcs source, and gone to the extent of learning to read Haskell in order to figure it out. Re-implementing darcs in Squeak would be be a big job. Not just because Haskell has a very concise syntax (which would probably lead to considerable code expansion), but also because darcs is a big program. The automatic merger at the heart of darcs is just not a simple thing to do.
I looked into darcs fairly deeply when Colin and I were designing Monticello 2. Most of the complexity (and almost all of the need for the "theory of patches") comes from:
a) Darcs is versioning arbitrary text files, which don't have obvious semantic units, and thus b) for any version of a given semantic unit in the code base, there's no way to know exactly which previous versions it was derived from
The fancy stuff in Darcs is really just a way of reverse engineering that information. In Smalltalk, since we know the semantic units (classes/methods), we can record precise ancestry information for them directly, and have a *much* simpler merge algorithm that is just as effective.
To put it another way, using the Darcs automatic merge algorithms on file-outs of Smalltalk code is like dubbing your CDs to audio cassette and then running them through a *really good* noise filter to get rid of the tape hiss.
It's unfortunate that Monticello 2 has languished in the designed-and- half-implemented phase for so long (about 2 years now I think), because I do think it's a good model. It seems to be a case of "eating your children" - Monticello as it stands now is just barely good enough that there hasn't been a compelling enough itch to force us to finish v2. But feel free to encourage us in whatever way seems appropriate :)
Avi