最新网址:www.00shu.info
结盟之后的第三天,沈夜才意识到,这个“团队”的工作模式,跟他在公司带的项目组没什么区别:零号负责跑数,林小雪负责收集需求,他负责写代码和背锅。唯一不同的是,这个项目的需求方,可能是一整个正在吃记忆的深渊。
第一天,林小雪在备忘录里记下第一条记录:泪痣发烫,凌晨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,最擅长的,就是读规则。”
他顿了顿,又补了一句:
“尤其是那种,写得像人话的规则。”
窗外,城南的方向,一家废弃打印店的卷帘门,在夜里自己卷起了一半。
卷帘门后面,是黑的。
像一台,关机的屏幕。
最新网址:www.00shu.info