Existe-t-il une définition CS formelle de VCS et de versions de fichiers?

12

Je ne sais pas si c'était une blague, mais une fois que j'ai lu ce que l'on appelle une définition formelle d'un fichier dans un système de versioning tel que git, hg ou svn. C'était quelque chose comme un objet mathématique comme un homéomorphisme. Était-ce une plaisanterie ou y a-t-il vraiment une théorie informatique sur les systèmes de version et les mathématiques de VCS?

Niklas
la source
2
J'ai changé l'homémorphisme en homéomorphisme, mais je ne sais pas où chercher la topologie dans ce contexte. Voulez-vous dire homomorphisme?
frafl
3
Quelque chose comme en.wikibooks.org/wiki/Understanding_Darcs/Patch_theory ou projects.haskell.org/camp ? C'est toujours une bonne idée de rechercher haskell en matière de théorie et de programmation. Je peux en faire une réponse, mais je pense qu'il y a des gens qui connaissent mieux ce domaine.
frafl
Vous ne construisez pas quelque chose d'aussi complexe et critique qu'un système de gestion de versions sans une formalisation solide de ce que vous faites. Les gens qui piratent leur chemin peuvent parfois être des génies, mais ils sont généralement des idiots.
babou

Réponses:

11

Vous pensez à un tweet d'Isaac Wolkerstorfer (@agnoster) :

git devient plus facile une fois que vous avez l'idée de base que les branches sont des endofoncteurs homéomorphes cartographiant les sous-variétés d'un espace de Hilbert.

Malheureusement, c'est une blague. Comme l'auteur l'a écrit sur Quora :

Il était censé être fermement ironique. J'aime vraiment le git, et je pense que sa complexité est largement exagérée. Dans le même temps, je suis sensible au fait que les conseils des gourous gitus aux novices peuvent finir par ressembler à du charabia impénétrable.

Il n'est pas destiné à avoir une signification plus profonde. Les tentatives pour l'analyser de cette manière devraient être vaines, mais en raison d'un bogue en réalité, vous pouvez réellement faire n'importe quelle déclaration suffisamment ondulée si vous essayez suffisamment.

Cela a été discuté sur Programmers Stack Exchange et sur Mathematics Stack Exchange .


Blague à part, il y a eu un travail de formalisation du contrôle de version. Un effort qui allie théorie et pratique est le travail sur la théorie des patchs de David Roundy sur Darcs . L'objectif principal de la théorie est de modéliser la fusion et, en particulier, la résolution des conflits. Le wiki Darcs a une introduction à la théorie et quelques pointeurs ainsi qu'une bibliographie (non maintenue si obsolète si vous voulez une vue récente sur le sujet, mais il énumère un document d'enquête de 2009 de Petr Baudiš ) et une liste de conférences ( qui comprend du matériel plus récent). Il y a aussi un wikibook . Un article fondamental est Une approche de principe pour le contrôle de versionpar Andres Löh, Wouter Swierstra et Daan Leijen3 .

La théorie des patchs conduit à un modèle catégorique, qui a été plus récemment exploré dans A Théorie catégorique des patchs de Samuel Mimram et Cinzia Di Giusto et Homotopical Patch Theory de Carlo Angiuli, Ed Morehouse, Daniel R. Licata et Robert Harper . Dans le travail de Mimram et Di Giusto, le modèle a des fichiers en tant qu'objets et des correctifs en tant que morphismes. Je pense que cela fait de la fusion d'une branche un foncteur - un endofoncteur si vous travaillez dans un seul référentiel. «Endofuncteur homéomorphe» n'a pas de sens pour moi. Avec la théorie de l'homotopie impliquée, les sous-variétés d'un espace de Hilbert pourraient ne pas être si éloignées ...

Gilles 'SO- arrête d'être méchant'
la source
3

Bien sûr, il existe un formalisme mathématique pour les systèmes de contrôle de version. Il existe un formalisme mathématique pour pratiquement tous les algorithmes de CS. Il existe plusieurs formalismes pour beaucoup. Il n'y a pas de relation 1-1 entre les formalismes et les systèmes qu'ils modélisent . Les modèles peuvent aller du simple au complexe. Voici un exemple pour VCS / SCM également par Swierstra, non encore cité.

SCM présente également de nombreuses similitudes avec le concept des «univers / chronologies parallèles» et des voyages dans le temps parfois utilisés en science-fiction. Il capture l'état du système en évolution à différents moments ou «instantanés». Il y a des "branches" et des "fusions". Voir également les délais .

vzn
la source