世界序列 Universe Sequences

将来过去时作品中的重要概念,是一种平行宇宙的假设。

世界序列的设定灵感来自分布式版本控制软件 Git。

“时间”推动着万物沿着时间轴单向前进,进入世界在某个时间纬度的切片,创造出这个宇宙的一个复制品,就能在过去产生另一个未来。

作者自己能看懂的解释——用Git去解释序列的概念

这是作者在写这份笔记的时候突然想到的,用Git去解释这个虚构的平行宇宙概念实在是太方便了。

将世界的造物主视为 Git 托管服务商 GitHub。

起初,GitHub 上只有一个原始仓库(序列元),这个仓库只有一个拥有者(“唯一神”)。

由于缺少权限,大家只能调用 API 往前端提交commit,完全没有办法去做回滚或者开新分支的操作。

终于,有人按捺不住了,希望按照自己的想法去更新程序,便开始尝试破解托管服务器的后端代码(圣杯战争)。

最终他们的行为爆破了GitHub的服务器(圣杯战争尾声),产生了大量脏数据,原始的仓库变成了很多份提交历史乱七八糟的fork(基点序列)。

用户数据也乱七八糟的,有些人甚至因此获得了仓库管理员(晋升者)权限。

各个仓库的提交历史乱七八糟的,文件也不齐,神奇的是这个程序鲁棒性还不错,居然能跑起来,就是性能与原版的完整程序比起来差的远了,指不定哪天就挂了。

有些仓库文件保留的比较全,那性能就好一点(释放的超能力效果比较强)。有的世界管理员比较多,大家就都能整点活儿(有超能力的人比较多)。

各个仓库的成员绝大多数还是普通的成员,没什么操作权限,也不怎么看得懂代码,反正就是天天用着程序的发行版,即使有管理权限也不一定玩的明白(有超能力但自己不知道)。

而那些获得了管理员权限又看懂代码了的人,就能随便提交,开新分支,对程序进行修改,改得对不对就是一回事儿了。

最初世界分裂时,有100名用户的资料没有任何损坏,变成了超管,能够任意修改所有的仓库(不仅超能力的强度跟元始世界一样,还能进别的世界),但他们仍旧不了解托管网站的底层逻辑。他们可以给仓库的普通管理提权(能让这些人去别的世界)。

关于时间旅行:代码仓库可以从某个commit切出一个子分支(子序列),提交修改后合并到master(合并序列),这其中偶尔会存在编辑冲突(悖论冲突)。

有时候被checkout的子分支因为改的太多了,实在是不太好合回去,这个fork成便为一个独立仓库(子序列成为主序列)。

有的程序在开发的过程中使用了一些依赖项(不属于当前序列的世界主物质介入),那么依赖的兼容性变更会影响程序的功能。

有的程序依赖项过多(蝶序列),出现了内存溢出,一开始还好,一直这么下去程序会崩溃。

有的程序仓库管理离开了(巢序列),不再维护,渐渐地这个仓库就凉掉了,最后被删库。

需要留意:commit是由“时间”自然产生的,即使checkout一个新分支它也会自己持续更新(时间不能暂停,也不会倒流,你顶多只能重新解释某个时间段之后的历史)。

还有一点与真实的Git不同:从仓库的commit中切出的不是分支,只能是一份fork,因为没有权限直接改,只能fork一份到自己的名下再合回去(不能通过改变过去对当下进行热更新,只能从某个过去的时间节点复制一份,推演新的历史直至当下,后再把这段新的解释作为历史合并回去)。

序列类型

原初世界/元始序列/唯一界 Original META

原初的唯一世界被称为序列元,序列元的物质被称为世界主物质。

基准序列/奇点序列 HEAD Forks

元始序列分裂后的第一级fork。

基准序列是元始序列的从序列,同时它们也是特殊的主序列。

历史可以追溯到奇点大爆炸的那一刻,相对来说保有最完整的元始序列残存数据与commit历史。

主序列 MASTER Branch

基准序列的子序列,它们因为各种原因产生,但由于改动太大,再也合并不回去了,于是成为彼此独立且大相径庭的序列。

虽然地位上跟基准序列已无区别,但是历史只能追溯到从基准序列拆分出来的那一刻。

从序列/子序列 SERVANT Branch

由主序列的commit切出得来,如果不加干预,过去和未来产生的历史会和对应的主序列完全一致,无法独立存在很久,会自然合并回主序列。

如果加以干预,未来会产生变化,但在一定程度内程序会尝试自己解释因果,在一段时间后合并回主序列。

如果干预过多,导致过去的将来产生了太大的变动,子序列就合并不回去了。此时要么将历史的改变程度修正到可接受的范围内;要么就手动选择各自保留的部分,强制合并。后者必然导致一部分历史的遗失。

特殊序列

蝶序列 Overflow Exception Sequence

溢出异常序列。

世界主物质严重超出阈值的序列,世界受到主宰者的严重干扰,多余的子序列被源源不断的产出,最终将会在某一刻坍缩。

名字来源是“蝴蝶效应”

巢序列 Nil Exception Sequence

空位异常序列。

世界主物质远少于正常值的序列,接近维持序列“存在”的下限,宇宙即将无法包裹住其中的物质,引发爆炸。

蝶序列在坍缩过程中会产生许多的巢序列。主宰者晋升后突然离开也会产生巢序列。

名字来源是“空巢”

执行序列 Working Tree

不属于当前序列的晋升者进入序列后,序列必然成为蝶序列,并立刻产生一个子序列,该晋升者所处的子序列就是执行序列。

序列操作

提交 Commit

由“时间”自然而然推演历史的过程。

合并 Merge

使用子序列的过去重新推演主序列的历史,修正当前切片的行为。

切出 Checkout

主动进入序列并使其立刻产生子序列的行为。

推演 Push

推演并产出不属于世界原本历史的行为。

同步 Pull

使用主序列的过去推演当前序列的过去,并修正当前切片的行为。

悖论 Conflicts

合并序列时最常遇到的问题,子序列与主序列的差异太大了,因果无法自圆其说。

丢弃 Drop

完全否定整个序列的存在,构成世界的一切成为操作者的一部分。

除了操作者,没有人拥有与这个世界及其历史的任何记忆,没有办法证明它曾经存在过。

代价过于庞大,可能产生预期外的效果,例如操作者可能无法维持原本的形态,自身成为一个没有历史的全新序列。


另一种解释:共享画布

宇宙是一个psd,宇宙里的万物会不停的在图层上绘制,作为普通人,不论做出什么事情也只是在同一个图层作画。

晋升者可以Ctrl-J开新图层,当然新图层每时每刻也在自己更新,但是可以改吧改吧再合并回上一图层。如果改的合理,那么整幅画看上去还是一个整体;如果改的很突兀,那观测者可就不乐意了,你这地方一眼假,要么再改得合理点,要么剪切出去新开个psd得了。

同时存在很多psd,一般人没办法去别的psd,甚至不能离开自己的图层。

有的人可以看别的psd。但是不是自己的图层没办法直接改,要改的话还得复制一份,改完再合并回去。


序列编号(弃用,待重写)

array://servant_id.master_id.TYPE/@inspector/fork_id

array_type://inspector@servant_id.master_id:timeline_id/readable_name

  • array_type:// 序列类型。META/HEAD/MASTER/SERVANT
  • inspector 主宰者或介入者。群体以~代替。无法定义则留空。
  • servant_id 子序列ID。如果是元序列留空。
  • fork_id 复刻ID。对于元序列、基点序列以及序列元,留空。

示例:

  • 序列元 META://./
  • 阿尔法序列 HEAD://α:0/
  • 万界规划局 REFLECT://~epb@α:101010/EverythingPlanningBureau
  • R1L序列
    • 于龙所在的世界 MASTER://YuLong@R1L:1005/
    • 行星58所在的世界 SERVANT://~p58@MeM0.R1L:10492/
  • RED
Git 词汇表