darcs (was Re: [BUG] Integer hex is missing in 7006?)

Avi Bryant avi.bryant at gmail.com
Sat Mar 11 21:59:52 UTC 2006


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



More information about the Squeak-dev mailing list