Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Categorical Theory of Patches
Search
Hunter Madison
August 24, 2016
0
81
Categorical Theory of Patches
Hunter Madison
August 24, 2016
Tweet
Share
More Decks by Hunter Madison
See All by Hunter Madison
Vala and Objective C
hmadison
0
260
Sutures
hmadison
0
72
Featured
See All Featured
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
12
1k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
26
3.3k
New Earth Scene 8
popppiees
1
1.5k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
508
140k
Measuring Dark Social's Impact On Conversion and Attribution
stephenakadiri
1
130
Building the Perfect Custom Keyboard
takai
2
690
Have SEOs Ruined the Internet? - User Awareness of SEO in 2025
akashhashmi
0
270
The Power of CSS Pseudo Elements
geoffreycrofte
80
6.2k
Site-Speed That Sticks
csswizardry
13
1.1k
BBQ
matthewcrist
89
10k
GitHub's CSS Performance
jonrohan
1032
470k
Prompt Engineering for Job Search
mfonobong
0
160
Transcript
A Categorical Theory of Patches Hunter Madison
[email protected]
@355E3B lobste.rs/3553eb
Version Control
Time • One direction (forward) • Events (commits) have a
distinct order
Files • Things on disk • Contain stuff we want
to version
Patches • Instructions that let us transform one file into
a second one
Groups and Categories
Group • Set of elements, with an operation which combines
any two elements to form a third element • The operation satisfies the group axioms (Closure, Associativity, Identity and Invertibility)
Category • Objects linked by morphisms (functions) • We only
care about Associativity, Identity • Mesh Like
Category By IkamusumeFan - Own work, CC BY-SA 4.0, https://
commons.wikimedia.org/w/index.php?curid=36599484
Pushout • Two new morphisms which go to some new
object
Pushout (Yes, this came from the Wikipieda page)
Categorical Theory of Patches
Linking this up • Files -> Objects • Morphisms ->
Patches
L • Is the set of all files and patches
• Is partially ordered (vs linearly ordered) • We can use a pushout to resolve our merges
Merging
Merging • I’m skipping this • Myers or Patience diff
handles this.
Implementation
Implementation • Darcs* - http://darcs.net/ • Camp - http://projects.haskell.org/camp/ •
Pijul - http://pijul.org/
Demo Time
None
This paper, I love • Its not going to replace
the one true VCS • But, we can use it to recast to a different model
Recasting • Instead of focusing on how to solve corner
cases, we can instead find a general solution and build a concrete description • In general, we can do this for any problem
Reading List • “A FORMALIZATION OF DARCS PATCH THEORY USING
INVERSE SEMIGROUPS” - ftp:// ftp.math.ucla.edu/pub/camreport/cam09-83.pdf • “Camp Path Theory” - http://projects.haskell.org/ camp/files/theory.pdf • “The Theory of patches-vector” - http:// liamoc.net/posts/2015-11-10-patch-theory.html