世界序列 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