воскресенье, 22 декабря 2013 г.

VCS время

Знакомство с системами контроля версий (с распределёнными) позволяет воспринимать время как такую своеобразную систему контроля версий. Каждую, допустим, секунду, происходит коммит накопившихся за секунду изменений. Ну или не секунду, а какой-нибудь там квант времени, не суть важно. Всё это происходит линейно (всякие замуты типа многомировой интепретации квантовой механики Эверетта я сейчас не рассматриваю), и изменения наслаиваются коммит за коммитом, как работа одного программиста, который планомерно работает в одной ветке над решением одной задачи.

Представьте себе, что какому-то человеку - назовём его путешественником во времени - становится доступна возможность перейти на какой-либо из коммитов в имеющейся истории, сделать, так сказать, чекаут ревизии из лога. И путешественник во времени пытается перейти из точки Б в точку А, расположенную ранее. Что происходит в этот момент? В этот момент путешественник во времени переходит в то состояние, в котором находился тогда. Он не сохраняет память о всём, что было с ним между точками А и Б, так как эта память - суть наслоённые изменения, которые путешественник во времени забрать с собой не в силах.

Так как мы считаем человека обладателем свободной воли (многие полагают, что все процессы в человеческом мозгу строго детерминированы, так что никакой свободной воли на самом деле не существует), то, получается, путешественник во времени, попав в прошлое, хоть и не сохранит никакой информации о том, что он сюда перешёл и что с ним было между моментом, в который он перешёл, и собственно переходом, сожет начать действовать по-другому, равно как и все остальные люди. Таким образом, начинается новая ветка, в которой копятся свои изменения.

Аналогичный эффект будет и в том случае, когда путешественник во времени обладает способностью переходть из ветки в ветку. Этот перехож также не имеет смысла, так как путешественник во времени потеряет всю память о ветке, из которой он пришёл, и приобретет память о ветке, в которую он пришёл.

То есть с такой точки зрения путешествия во времени не имеют смысла.

Но системы контроля версий обладают ещё и другими базывыми функциями. Я имею в виду слияния веток. Если рассматривать каждый коммит как дельту - набор изменений, произошедших с прошлого коммита, то с такими штуками можно проворачивать другие фокусы (см. git cherry-pick, git stash и так далее). Значит, могут возникать конфликты. Как с такими конфликтами обходится время, я не знаю :) Надо подумать, как оно с ними может обходиться.

Комментариев нет:

Отправка комментария

Ублюдочный Гугл поломал форму комментариев. Извините.