|Instructor:||Norman Ramsey, Halligan Extension 006|
Distributed revision-control systems, such as git, Mercurial, bzr, and darcs, have become very popular. But it's hard to tell exactly what they do. In this class, we'll apply techniques from functional programming—algebraic laws, equational reasoning, immutable data structures, and first-class functions—to the problems of building and understanding revision-control systems.
A typical class period will be 2 hours:
20 minutes of introduction to a problem or paper
60 minutes of focused small-group work on the problem or paper
40 minutes of synthesis so that the entire class understands the problem or paper
Class will begin with two to four weeks of advanced functional-programming technique, and it will continue with papers about the foundations of maintaining views of source code and other resources that evolve over time. Around the middle of the term we will shift our attention entirely to students' projects.
Each student is expected to undertake one project for the semester. Projects may be undertaken alone or in teams of any size. Any project loosely related to functional programming and source-code control is acceptable. Ideas might include
Building a model of a system and proving facts about it. For example, prove that there is no sequence of git commands that breaks a repository, or prove that developers operating on different files will never cause a merge conflict.
Use algebraic laws and properties as a basis for testing revision-control systems.
Develop a unified model (in code or in theory) that explains the differences between a patch-based system like darcs or camp and a state-based system like git, mercurial, or bzr.
Build a revision-control system in a functional language, either standalone or on top of a performant persistent store like git.
Grades will be based entirely on class participation and on a contribution to an engaging project. There will be no examinations, no graded homeworks, and no graded problem sets. (There may be a few ungraded problems to be done outside of class.)