> Kẏra <kxra <at> riseup.net> writes:
> 
> Can someone explain the difference between the patch theory behind darcs 
and that of camp?

Thank you Eric, Ganesh for your replies to Kẏra. (I have traced through 
the various references.)

I note that IanL has recently withdrawn from his supporting role for ghc. 
Does that mean less activity on Camp? Or so that Ian can work more on Camp?

The Camp project pages are a strange mix of very nitty-gritty detail about 
some technical aspects (like repo format), and very abstract 'theory'.

I wonder what it means for a VCS to be "similar in philosophy to darcs", 
as Ian's 2012 draft puts it?

For example, would the Loh/Swiestra/Leijen 'Principled Approach' count in 
or out? (They have what amounts to a GUID for every file being tracked, 
which is a proposal under Darcs3 for the AddAddConflict. What's more, they 
have a GUID for each line of the source text, to deal with conflicts at 
the line level.)

Darcs, Camp, L/S/L have in common:
+ a repo is a multiset of patches
+ patches can be freely resequenced, providing no conflicts
+ any conflict-free resequence is equivalent
  (results in the same external representation)
+ so you can cherry-pick any patch into any repo (conflicts permitting)

Where they differ is on how to resequence patches:
* Darcs, Camp have an algebra for commuting
* which needs 'adapting' a patch when commuting it
  (that is, in the 'interesting' cases)
* and how that works depends on the two patches
  and by extension a whole chain of patches
  to get from source repo to target 
I see that many of the difficult parts of 'Darcs 3 Wishlist' are around 
this commuting and adapting. Issue 1786 says:
"The problem is that whenever you want to define a new patch type, you
have to define how that type commutes with all other patch types."

L/S/L's approach is:
* use a symbolic notation for all patches (such as a file GUID)
* so that they don't need adapting for commute.
* capture any dependencies 'inside' the patch.
* there is an algebra to show that commuting preserves the 'moral effect'
  (providing no conflicts)
  This is in effect the same as the 'Darcs laws'.
* Patches are held as sets of primitive operations on the repo,
* so combining patches is set union of those primitives.
  [I know I'm over-simplifying there!]

It seems to me that set-based operations, and avoiding the need to adapt 
patches on commute, would make it easier to introduce new patch types(?) 
without having to deeply understand what each type does(??) It might also 
make it easier to detect conflicts/dependencies as a set mis-match(?)

So is L/S/L 'on the radar' for Darcs3?

AntC



_______________________________________________
darcs-users mailing list
darcs-users@darcs.net
http://lists.osuosl.org/mailman/listinfo/darcs-users

Reply via email to