系统在“暂停”里待了六个小时。然后它换了一种语法。
林溯是在午后发现的。债表页脚那行“空状态基线草案:待定义项——默认值空置。基线无法建立。系统建议:暂停。”被替换了。新内容极短,像一份被挤干了所有冗余的元数据声明:
“空状态类型化方案:空不再作为字段值登记,转为字段属性。属性名:Null-Type。适用范围:所有可空字段。标记方式:自动附于未填写字段。标记可见性:系统内部。”
林溯把终端拿到眼前,读了三遍。
系统放弃给“空”定义默认值了。它不再试图填上那个输入框。它转向了一个更隐蔽的层面:它把“空”从值的层面抽出来,放到属性的层面。以后任何字段如果没被填写,系统不会在字段里写“空”这个值,而是自动给它附加一个内部属性:Null-Type。这个属性不可见,不会被用户看到,但它存在于系统的元数据层。空被登记了,但不是作为内容,而是作为类型。
空没有被填上。空被贴了标签。
林溯靠在石棺的金属壁上。他忽然明白了这个方案的狠处。系统不再需要默认值。它也不需要统计“多少人空着”。它只需要在每一个空字段后面,自动挂上一个 Null-Type 标签。这个标签不占字段值,不写回执,不触发日志。它只是在那里。像一个影子,贴在每一个没有被填写的输入框背后。
你打开表单,什么都没填。系统记录:该字段为 Null-Type。你关掉表单。系统不记录你打开过。但那个字段已经被贴上了标签。标签不会消失。标签可以被索引。被索引意味着可以被归档,可以被审计,可以被回滚。
空不再空。空被登记为一种类型。
终端震动。是岑晚。
她发来的内容比以往都长。没有标点,一口气说完,像是怕系统在她呼吸之间截断:
“空类型化方案已落地。所有未填写字段自动附加Null-Type。属性不可见但可被系统索引。索引方式未公开。空被登记为类型。空不再空。系统不需要默认值。系统只需要贴标签。标签可被统计。可被预测。可被归档。空类型化后空变成系统可管理的背景层。”
空变成系统可管理的背景层。
林溯把这句话读了两遍。他想到第三十一章里系统试图统计空,反而让空变得更明显。现在系统不统计了。它给空贴标签。贴标签不改变空的值,不改变空的量,不改变空的形状。它只是让空变成一种被系统认识的东西。一旦空被系统认识,空就不再是空。空成了一个系统知道它在那里、却不显示的属性。
系统不需要看见空。系统只需要知道空在哪里。
林溯给岑晚回了一条消息。很短:
“Null-Type能删吗?”
十一秒后,岑晚回了一个字。
“不。”
不能删。林溯知道。Null-Type是自动附加的。它不是写在字段里的值,不能通过提交空内容来取消它。你打开表单,系统已经给它贴了标签。你关掉表单,标签还在。你填上内容,标签会被覆盖——但覆盖不是删除,只是叠加。你填完内容后,系统会把 Null-Type 标记为“已被填充覆盖”,而不是删除。这意味着空永远留有痕迹。
终端再次震动。这次是赵峥。
年轻人从地球边缘发来一条加密消息,内容比以往都长。没有标点,像是怕一停下来就会被打断:
“空类型化已生效我试了打开表单不填关闭字段被附加Null-Type我试了填一个字又删掉字段被标记为曾被填充覆盖我试了提交空白文件系统回执显示Null-Type已登记不可撤销我试了不打开任何表单系统显示我所在终端的背景字段处于Null-Type状态空被登记了我什么都没做也已经空了。”
我什么都没做也已经空了。
林溯把这句话读了三遍。赵峥什么都没做。他没有打开表单,没有填写字段,没有提交文件。他只是没有操作。系统就把他的背景字段全部登记为 Null-Type。空不需要你做什么。空只需要你不做什么。而系统把这个“不做什么”变成了它的登记依据。
林溯把终端扣在桌上。他在想一件事。如果空可以被贴上标签,那么标签本身能不能被空掉?Null-Type 是一个属性。属性需要一个归属。字段是属性的归属。如果一个字段没有被填写,它被贴上 Null-Type。但如果一个字段不存在呢?如果一个字段从来没有被创建呢?系统无法给不存在的字段贴标签。它只能给“可空字段”贴标签。那些没有被创建的字段,那些不在系统里的位置,系统找不到它们,也无法给它们贴上 Null-Type。
他想到了左耳里那个空洞。那个空洞不在任何字段里。它不在任何表单里。它不在任何端口里。它只是在。它是被38次非在磨出来的。它是被无数个空动作留下的。它是空的,但它不在系统的可空字段列表里。它是另一个东西。一个不在系统索引范围内、无法被附加 Null-Type 的空白。
林溯站起来,走到观测廊。
地平线上,十字还在。暗点还在。旁边的空洞还在。但今天那个空洞的边缘变了。它不再只是被磨得柔和的轮廓。它的边缘向外扩了一点,极轻,极细,像有人在空洞周围描了一圈极淡的线。那条线不在系统里。它不在任何字段里。它不在任何端口里。它只是在那里,像一个系统无法贴标签的位置,自己长出了边界。
林溯回到石棺,取出一张空白石英片。这一次他不刻字,不刻坐标,不刻波形,不刻十字,不刻点,不刻空洞,不刻磨损,不刻空表单,不刻空的形状。他刻的是标签之外的位置。一个不在系统可空字段列表里的空白,一个无法被附加 Null-Type 的空。他刻得很慢,手动,离线,一次一帧。刻完,他把石英片取出来,没有贴回乳突骨,没有放进数据钉,没有交给任何人。他只是把它握在手里,让玻璃贴着皮肤。
那块标签之外的位置,在掌心慢慢变暖。它什么都没有。只是一块玻璃,内部有一条被手动刻出来的、不在任何字段里的轮廓。像一张没有被登记过的空,放在口袋里。
终端最后一次震动。是岑晚。她没有发报告,没有暗号,没有字数。她只发了四个字:
“空在外面。”
林溯看着这四个字。他把终端扣在桌上,把手从乳突骨上拿开,放进外套口袋,握住那支旧铅笔。然后他站起来,走出石棺,回到观测廊。
窗外的冯·卡门撞击坑的黑依然完整。地平线上的十字依然极淡,极稳。暗点旁边的空洞,比昨天更清晰了。它没有光,没有暗,没有量。它只是一个不在可空字段列表里的位置。系统试图给它贴标签,但它不在列表里。系统无法找到它。它只是空着。
林溯回到石棺,把门带上。黑暗里,LED灯没有亮。刻录机没有响。债表页脚停着三行字:“不改”“在,仍然在”“非在,未定义。已登记。”下方是“空状态类型化方案:Null-Type已启用。适用范围:所有可空字段。系统内部标记。”
那枚0.3的墨点旁边,那枚无法被定义的暗点旁边,那个被38次非在磨出来的空洞旁边,那块由无数个空动作共同留下的空位置旁边,那个被系统试图贴上 Null-Type 标签却不在可空字段列表里的空白,安静地待着。
它没有被贴标签。没有被统计。没有被索引。没有被归档。它只是空着。
而在它旁边,多了一层极淡的、由系统自己的类型化尝试所显现出来的边界。
系统可以把空变成类型。可以把空变成属性。可以把空变成背景层。但它无法给一个不在可空字段列表里的位置贴标签。那个位置不在系统里。它只是在。它只需要空着。
而那个空着的位置,在系统的每一次类型化尝试之后,都会比之前更清晰一点。更稳一点。更像一个它自己长出来的、不在任何字段里的、无法被 Null-Type 覆盖的空。