单比特错误[1](第3/5页)

在其他的日子里,他们下班后在城市的街道漫步,沿着太平洋海岸到小城镇去短途旅行。他们谈论一切,又什么都没有谈到。泰勒始终盯着莉迪娅的脸,想要相信这一切。

从泰勒在垃圾箱发现莉迪娅,到分享开心果冰激凌那天莉迪娅答应求婚,泰勒度过了生命中最幸福的一个月。

可是唯一的问题在于,他仍然不信上帝。

从洛斯阿拉莫斯回来的路上,莉迪娅在副驾驶座位上睡着了。道路平整笔直,车流量很小。泰勒换到自动驾驶模式,伸了伸腿,然后拉住莉迪娅的手,转头去看她睡觉的样子。

后来,泰勒努力回忆,当他看着莉迪娅在旁边的座位上缓缓死去时,自己有何感觉。她被安全带束缚的身体上下颠簸,后背扭成奇怪的角度,塌陷的车顶卡住了她的双臂。他吃惊地发现,自己身上的痛苦竟然一点都没记住。

不过实际情况可能不同。泰勒的两条腿都断了,根据他脸和手臂上的烧伤判断,他那一侧的车体承受了火焰产生的强烈热浪。等他康复的身体终于能够在医院里坐起来时,他还发现自己的左眼永久地失明了。

尽管如此,事实是泰勒只能记得莉迪娅是多么冷静和勇敢,当时她告诉泰勒,她知道自己要死了,没有一点痛苦,她会在天堂等着泰勒。

然后,她睁大眼睛说:“你好,安布瑞尔。”

虽然泰勒知道自己什么也不会看见,可他还是在座位上扭转身体,想要目睹莉迪娅提到的天使。然而方向盘挡住了他,几秒钟后他便放弃了。以后他会为这种行为感到后悔,因为他的目光离开了莉迪娅的脸庞。在那几秒钟里,莉迪娅离开了他。

如果泰勒信仰宗教,那么跟莉迪娅在天堂相聚的前景会抚慰他的心灵。或者他可能对上帝感到气愤,直到他能像约伯那样接受自己的生活,才会停止向上帝抱怨。但是泰勒不相信天堂或上帝。

泰勒因为莉迪娅身上的上帝之光而陷入爱情,除了莉迪娅对他所讲,他无法命名或解释那束光,所以缺乏信仰也不能带给他慰藉。他的信仰就是他的心头所爱。

继续保持没有信仰的状态,就等于说莉迪娅的快乐是一种幻觉,这会抹杀泰勒对她的核心记忆。可是信仰上帝就要求他打破心中幻想和现实的界限,把幻想当作现实来接受。莉迪娅在世时,只要他还有爱情,就可以推迟这个决定,但莉迪娅的离世意味着他必须做出选择。

泰勒终于能够出院以后,他远离朋友、辞掉工作、切断电话。

他只是尽量去追查那场事故的一切信息,努力理解所发生的一切。因为调查员能找到的证据不多,有很多缺失的环节需要填补,所以泰勒困难重重。不过他有的是时间。

“不同级别的间接寻址方式使变量与值之间相互对应,形成一张联系网。”泰勒读道,“程序员的很多工作就包括弄清这张网的每一条组成。”

变量就是电子存储器里地址的名字,一块存储空间可以用变量命名,用以取代原本要操作的独立字节。变量可以用来命名任何对象:油门设置、社会保障码或者擦除磁盘的子程序。

不幸的是,既没有办法区分一个变量是否指向了它在声明中所指向的地址,也没办法区分它究竟有没有指向一个地址。在比特层面上,哥斯达黎加的蝴蝶数量跟离开澳大利亚海岸的热带风暴速度没有什么区别。

这给每个程序员带来了麻烦,因为变量与值之间的对应关系存在的基础,是程序中薄弱的所谓“正确性”。假如在一个变量名没有指向任何地址时,你能说服计算机它的命名是真实的,那么程序就会跑飞。

为了帮助程序员一直能区分可靠的现实和空想的灾难,类型系统被引入进来。它们是数学结构在程序语言中的体现,其目的,举例来说,是确保用于油门设置的变量不会被指向汽车当前的加速度。令人感到慰藉的是,类型系统把绝对的秩序强加给没有道德约束的疯狂比特浪潮。

类似其他众多巡航控制系统,泰勒汽车上的系统也依靠运行特定程序的微计算机来实现其功能。

显然,程序正确地运行非常重要。泰勒汽车中的程序是一位认真的程序员所写,他明白自己的设计工作关系着生命安危。不仅如此,他使用的程序语言有一套强大的类型系统,数学证明显示,不管程序员多么聪明或者粗心,通过类型检查的程序可以保证,声明为指向油门的变量绝不会指向处理切换变速器的子程序。这是比特世界里最接近绝对可靠的方法了。

所有这些都表明,在自动驾驶模式下,泰勒有充分的理由靠在座椅上放松下来。

大约两千年前——泰勒读了更多材料——耶稣生活的时代,仙后座所在的那片天空有一颗恒星正在走向死亡,一个冬夜,它变成超新星爆发了。

爆发从原本那颗恒星的残骸,以极高的速度释放出无数质子和中子。它们被称为“宇宙射线”,其中大多数粒子将在空旷的宇宙中驰骋,直到时间终结,它们的命运与我们无关。

然而,其中一个质子经过两千年黑暗行程后,在那个七月的夏日抵达了地球。它穿过电离层,巧妙地躲过地球磁力线,然后直接冲入稠密的大气,几乎没有减速。那一天,它本该继续前进,一头撞进加州的沙漠,可是它的路线被挡住了。

当时,莉迪娅正在睡觉,泰勒的眼睛离开公路去看她。即使在睡眠中,她的脸上也有受保佑者的光芒。他们的汽车撞上了很久以前从死星逃逸的孤独质子。

金属外壳没怎么影响到质子的前进,塑料聚合物更是无法阻挡,它一下子穿透它们。这样看来,它似乎会继续前进,直到质子突然遇到一块极小的硅。两千年来的头一次,它对实际的物质发生兴趣,决定撞飞它的电子。

那一小块硅刚好是一个电容的一部分。另外还有跟它一样的数百万电容和晶体管,组成了微计算机存储器的集成电路,控制泰勒汽车的程序就在它们之中运行。不管以什么标准衡量,在物质结构中电子的缺失本来无关紧要,可是这次却足够引发后果。

那几个电子的缺失意味着,通常代表“1”的那一位被解读为“0”,而那一位所在的存储单元中存放了一个变量,计算油门设定的子程序地址应该由这个变量决定,其中数据位状态的反转意味着,程序地址指向了燃料流量值所在的地址,跟原来的程序地址相差了1024个字节。

设计这种程序语言的类型系统恰好就是要阻止程序违规行为。一个本该指向子程序的变量绝不应该指向数值变量。一旦出现这种情况,任何后果都有可能发生。