Gibt es eine formale CS-Definition von VCS- und Dateiversionen?


12

Ich weiß nicht, ob es ein Witz war, aber ich habe einmal gelesen, was als formale Definition einer Datei in einem Versionssystem wie git, hg oder svn bezeichnet wurde. Es war so etwas wie ein mathematisches Objekt wie ein Homöomorphismus. War das ein Witz oder gibt es wirklich eine Informatiktheorie über Versionierungssysteme und die Mathematik von VCS?


2
Ich habe Homemorphismus in Homöomorphismus geändert, aber ich habe keine Ahnung, wo ich in diesem Kontext nach Topologie suchen soll. Meinten Sie homomorphism?
Freitag,

3
So etwas wie de.wikibooks.org/wiki/Understanding_Darcs/Patch_theory oder projects.haskell.org/camp ? Es ist immer eine gute Idee, nach Haskell zu suchen, wenn es um Theorie und Programmierung geht. Ich kann dies in eine Antwort umwandeln, aber ich denke, es gibt Leute, die diesen Bereich besser kennen.
Freitag,


Sie bauen nicht etwas so Komplexes und Kritisches wie ein Versionsverwaltungssystem, ohne eine strenge Formalisierung Ihrer Arbeit. Menschen, die sich auf diese Weise hacken, sind manchmal Genies, aber normalerweise sind sie Dummköpfe.
Babou

Antworten:


11

Sie denken an einen Tweet von Isaac Wolkerstorfer (@agnoster) :

git wird einfacher, wenn Sie die Grundidee haben, dass Zweige homöomorphe Endofunktoren sind, die Untervielfaltigkeiten eines Hilbert-Raums abbilden.

Leider ist es ein Witz. Wie der Autor über Quora schrieb :

Es war fest auf die Wange gerichtet. Eigentlich liebe ich Git, und ich denke, seine Komplexität ist stark übertrieben. Gleichzeitig bin ich mit der Tatsache einverstanden, dass Ratschläge von Git-Gurus an Anfänger wie unergründlicher Kauderwelsch klingen können.

Es soll keine tiefere Bedeutung haben. Versuche, es auf diese Weise zu analysieren, sollten vergeblich sein, aber aufgrund eines Fehlers in der Realität können Sie tatsächlich eine ausreichend handgewellte Aussage treffen, wenn Sie sich anstrengen.

Dies wurde beim Programmierstapelaustausch und beim Mathematikstapelaustausch erörtert .


Scherz beiseite, es wurde an der Formalisierung der Versionskontrolle gearbeitet. Eine Anstrengung, die Theorie und Praxis verbindet, ist die Arbeit an der Patch-Theorie von David Roundy über Darcs . Das Hauptziel der Theorie ist das Modellieren der Verschmelzung und insbesondere der Konfliktlösung. Das Darcs-Wiki enthält eine Einführung in die Theorie und einige Hinweise sowie eine Bibliographie (die nicht mehr aktuell ist, wenn Sie eine aktuelle Ansicht zu diesem Thema wünschen, aber eine Übersicht über das Jahr 2009 von Petr Baudiš enthält ) und eine Liste mit Vorträgen ( welches neueres Material enthält). Es gibt auch ein Wikibook . Ein wegweisendes Papier ist Ein prinzipieller Ansatz zur Versionskontrollevon Andres Löh, Wouter Swierstra und Daan Leijen3 .

Die Patch-Theorie führt zu einem kategorialen Modell, das kürzlich in A Categorical Theory of Patches von Samuel Mimram und Cinzia Di Giusto sowie in Homotopical Patch Theory von Carlo Angiuli, Ed Morehouse, Daniel R. Licata und Robert Harper untersucht wurde . In der Arbeit von Mimram und Di Giusto hat das Modell Dateien als Objekte und Patches als Morphismen. Ich denke, das macht das Zusammenführen eines Zweigs zu einem Functor - einem Endofunctor, wenn Sie in einem einzigen Repository arbeiten. "Homöomorpher Endofunktor" macht für mich keinen Sinn. Unter Berücksichtigung der Homotopietheorie sind die Unterverteilungen eines Hilbert-Raums möglicherweise nicht so weit entfernt ...


3

Natürlich gibt es einen mathematischen Formalismus für Versionskontrollsysteme. In CS gibt es für praktisch jeden Algorithmus einen mathematischen Formalismus. Für viele gibt es mehrere Formalismen. Es gibt keine 1: 1-Beziehung zwischen Formalismen und den von ihnen modellierten Systemen . Die Modelle können von einfach bis komplex reichen. Hier ein Beispiel für VCS / SCM, ebenfalls von Swierstra, noch nicht zitiert.

SCM hat auch viele Ähnlichkeiten mit dem Konzept "paralleler Universen / Zeitlinien" und Zeitreisen, die manchmal in Science-Fiction-Filmen verwendet werden. Es erfasst den Zustand des sich entwickelnden Systems zu verschiedenen Zeitpunkten oder "Schnappschüssen". Es gibt "Branches" und "Merges". Siehe auch Zeitleisten .

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.