规则怪谈我在地狱当BUG小伦亚

规则怪谈我在地狱当BUG

第8章 记忆仓库

小伦亚 · 更新时间未知

结盟之后的第三天,沈夜才意识到,这个“团队”的工作模式,跟他在公司带的项目组没什么区别:零号负责跑数,林小雪负责收集需求,他负责写代码和背锅。 唯一不同的是,这个项目的需求方,可能是一整个正在吃记忆的深渊。 第一天,林小雪在备忘录里记下第一条记录:泪痣发烫,凌晨2点47分,方向偏北,持续11秒。发烫的时候,她看见一扇锈掉的铁门,门后是黑的。 “黑色的地方。”沈夜说,“具体一点。” “很黑。像关机的屏幕。” “……也算需求了。” 第二天,零号把七条规则碎片排成一张表。鸽子、电梯、打印机、半条短信,时间、地点、误差,全列在上面。她盯着表格看了很久,说了一句:“它们不是碎片。” “是什么?” “是坐标。”零号说,“鸽子停的位置、电梯坏的时间、打印机卡纸的页码……你把它当成一个点在动。它每天移动一点点,画出来的是一条线。” “一条线?通向哪里?” “还没画完。”零号说,“再给我两天。” 第三天白天,沈夜照常上班。 午休的时候,他站在茶水间,盯着咖啡机出神。旁边同事拍了他一下:“想什么呢?跟丢了魂似的。” “在想一个bug。”沈夜说。 “什么bug?” “一个……我记不清什么时候写的bug。”他顿了顿,“奇怪的是,我连它什么时候被我修好的,也记不清了。” 同事看他的眼神,像看一个修代码修到走火入魔的人。 沈夜没有解释。他没法解释,他今天早上打开编辑器,发现昨晚自己提交的代码里,混进了一个他从没写过的变量名:laozhou。 小写,全小写,像深夜随手敲的。 他不知道自己是几时敲的。他只知道,这个变量名出现的地方,恰好是他三年前写过“那条规则”的位置,那条让他拿到BUG#0001的规则。 下班回家,沈夜从床底拖出一块积灰的硬盘。 那是三年前公司垮掉那天,他从机房里带走的最后一份代码仓库备份。老板跑路,服务器停机,他抢在资产清算前,把整个仓库clone了下来,塞进这块硬盘。当时他没想太多,只觉得“自己的代码不能丢”。 现在想想,他可能当时就“知道”了什么。 他把硬盘接上电脑。指示灯亮了,硬盘发出一声很轻的、像是松了口气的嗡鸣。 挂载,打开,git log。 136条提交记录,时间跨度两年零四个月。开头几行,是他熟悉的、深夜加班时的提交信息:“修楼梯bug”、“规则1不生效”、“加班,勿念”。 他一条一条往下翻。翻到三年前的某一天,手指停住了。 那一天,凌晨2点11分,有一条提交,署名不是他。 提交信息只有一行:“把门修好了。剩下的,交给时间。” 他盯着那行字,脑子里嗡嗡响。他想不起这条提交。他翻遍记忆,也找不到自己跟任何人共用过这个仓库的痕迹,更找不到,一个会在凌晨两点,替他修“门”的人。 他点开那次的改动记录。 改动的是一个文件:door.py。 diff很干净,只有三处: · 修复了递归死循环 · 补上了出口判断 · 在文件末尾,加了一行注释 注释只有一行代码: if(you_are_ok()){微笑();} 沈夜的鼠标停在上面,很久没有动。 这句话,他认得。他太认得了。这是他自己的习惯,每写完一段复杂的逻辑,他都会在注释里写这么一行,提醒自己“能跑就行,别想太多”。 但这段注释,不是他写的。 他把那段注释复制出来,贴进搜索框,搜了整个仓库。搜到134个结果。全是他的注释,除了这一个。 这一个,是他那个不知名的“队友”写的。 模仿他的习惯,模仿得一模一样。 沈夜靠在椅背上,盯着天花板。他忽然想不起,自己三年前写这个模块的时候,旁边坐着谁。他用力想,想得太阳穴发胀,脑子里只有一片白。 然后,像上次在公司食堂一样,一个名字从他嘴里自己溜了出来: “老周。” 他喊出这个名字的瞬间,电脑屏幕闪了一下。 不是屏保。是整块屏幕,像被人隔着玻璃拍了一下。 沈夜慢慢坐直。屏幕上的代码,正在自己滚动。 他没有碰鼠标。 代码一行一行往上滚,快得看不清,像有人在翻他三年前的笔记。滚到door.py那一页,停住了。 屏幕角落里,光标自己亮起来,开始打字: “你终于回来了。” “……你谁?”沈夜说,“报个工号。” 光标停了一秒。屏幕里传出一声很轻的、像是笑又像是叹息的声音: “你忘了。” “我是最后一个,还在维护这段代码的人。” 沈夜的手放在键盘上,没有动。他没有碰键盘,但屏幕上的光标,又开始自己动起来。 “门是好的。”它打道,“门一直很好。你该担心的,不是门。” “该担心什么?” 光标在屏幕上顿了很久。 “你忘掉的东西,正在吃你。” “……你是它?” “不是。”光标打了两个字,停住了,像在犹豫要不要说更多,“我是你留在门后面的东西。” “三年前,你说过一句话,让我等你。” “你说:‘快了,就快修好了。’” 沈夜的后背,一点点凉了下来。 他想起了打印店。想起那扇卷帘门。想起自己站在门口,对什么人说过同样的话:“快了,就快修好了。” “……打印店。”他问,“你是打印店里的那个?” 光标没有回答。 屏幕上的代码,像被一只手按住了,一行一行停下来,停回了door.py。最后,屏幕上只剩下那行注释: if(you_are_ok()){微笑();} 然后,光标在注释下面,补了一行字: “第七层,等你。” “带上你的队友。这次,别一个人来。” 屏幕一黑。 沈夜坐在黑暗里,过了很久,才听见自己咽口水的声音。 他重新点亮屏幕。仓库还在,door.py还在,那行注释还在。只是注释下面,多了一行他从来没有写过的代码:memory_lock = True 他盯着这行代码,脑子里“当”了一声。 memory_lock。记忆锁。 “我的记忆……是被人锁上的?” “不是人。”零号的声音从桌面上传来,她不知道什么时候从芯片里出来了,巴掌大的小人坐在硬盘盒上,绿色的代码流动着,“是代码。” “你看到了?” “你屏幕亮的时候,我全看到了。”零号说,“沈夜,那不是普通代码。那行memory_lock,是写在你记忆里的,有人用代码,锁住了你的一部分记忆。” “谁写的?” 零号沉默了。 “……从风格上看,”她说,“写得跟你一模一样。” 第二天晚上,三个人坐在沈夜的出租屋里。 茶几上摊着三样东西:零号画的坐标线、林小雪的泪痣记录、沈夜打印出来的git log。 “规则碎片在画一条线。”零号指着坐标线,“这条线的终点,在这里,城南,幸福路,废弃打印店。” “泪痣发烫的方向,也指向那里。”林小雪说,“我第一天记的偏北11秒,对着的就是那个方向。” 沈夜把git log摊在桌上,指着那个陌生ID:“这个署名,我三年前,大概率是跟他一起写的这段代码。我的记忆被锁了,锁得很干净,但我身体还记得他。” “名字会暴露在规则里。”林小雪说,“你连喊他两声‘老周’了,他可能已经‘知道’你在找他。” “……那正好。”沈夜说,“我也想知道,他到底是谁。” 三个人对视了一眼。 “打印店。”零号说,“所有线索,都指向那家打印店。” “它可能不是打印店。”沈夜说,“它可能是那扇门在现实里的入口。” 他站起来,把打印出来的git log折好,塞进口袋。 “明天晚上,我们过去看看。” “等等。”林小雪忽然说,“如果那家打印店,真的是入口,那它门口,会不会也贴着规则?” 沈夜想了想。 “那正好。”他说,“我修了这么多年bug,最擅长的,就是读规则。” 他顿了顿,又补了一句: “尤其是那种,写得像人话的规则。” 窗外,城南的方向,一家废弃打印店的卷帘门,在夜里自己卷起了一半。 卷帘门后面,是黑的。 像一台,关机的屏幕。