单比特错误(第5/8页)

“两千年以前,”泰勒继续读下去,“大致是在耶稣生活的时代,在仙后座天域有一颗衰老濒死的恒星。它在一个冬季的夜晚爆发,成了一颗超新星。”

这次爆发令无数质子与氢原子核高速飞离那颗恒星的残躯,我们把它们称为宇宙射线。其中的绝大部分注定要在虚空中穿行,直至时间的尽头。我们不必为它们的命运介怀。

但其中一个质子在黑暗中旅行了两千年,在那个阳光灿烂的七月的白天来到了地球。它穿透了电离层,优雅地避开了地球磁力线,随后遇上的逐渐浓密的空气也没怎么降低它的速度。本来它会勇往直前,一头扎到加利福尼亚的沙漠里面,但是某样东西挡住了它的去路。

那一瞬间,利迪娅正在安睡,泰勒的视线正从路面转到利迪娅身上。睡梦中,她脸上的蒙恩之光依然如故。就在这一刻,他们的车拦截了那个自古代死亡恒星逃逸的质子。

它根本没有留心那层金属外壳,塑料合成材料更引不起它的注意,于是它径直向前,有那么一阵子看起来似乎要继续旅行下去了。但它遇上了一个微小的硅晶体,于是两千年以来,它头一次对固态物质发生了兴趣,决定把里面的电子撞一些出来。

那个硅晶体是某个电容的一部分,周围类似的电容和晶体管数以百万计,它们都属于某块集成电路,而这块集成电路是一台计算机的内存,它上面运行的程序正在控制泰勒的汽车。似乎无论从哪个层次上来看,这些电子的缺失都微不足道,但正是这一点点缺失就足够制造出这一场灾难了。

失去了那些电子之后,本来表示“1”的某个比特现在就成了“0”,这个比特正好是分配给某个变量的存储单元的一部分,于是,那个本来是用来存储节流阀参数计算子程序地址的变量指向了燃油的流量值,两者之间正好差了1024个字节。

这正是那段程序尽力要防范的那种类型错误。用来代表子程序的变量永远都不应该指向一个具体的数值。一旦发生了这种事情,那其他一切都不再是不可能的了。

既然集成电路里面一个比特的错误就足以破坏编程语言所拥有的数学上完美无缺的类型系统,那么,按照泰勒的推理,难道人脑之中的一个单比特错误就不能让人把护士和天使混淆起来么?只要某个神经连接中断,然后再随机重建,连到某个风马牛不相及的地方,那么所有将不同种类的记忆区别开的壁垒都将土崩瓦解。利迪娅所见的异象,除开她的信仰,其实都是一次神经元失调的结果。引发这种失调的可能是疲劳、紧张、某个乱飞的基本粒子,或者是很久以前的那一天在波士顿诊所里发生的任何事情。这和泰勒自己创造出那段让奶奶伤心的记忆是同一个道理。

从理性到信仰,一比特的错误足矣。这就是泰勒的结论。

出人意料的是,这种理论不仅没有使利迪娅的信仰在他眼里变得可笑或是缺乏深度,反而让他得以理智地看待利迪娅的人生。如果将利迪娅的“信仰”视为某种程序“错误”,那就能跨越两者世界观之间的鸿沟。

进一步来说,只要能了解差错的生成原理,就可能人为地加以诱发。只要有足够的技术手段,有意在硬件中引入错误,便能让最优秀的安全软件失效。难道人就不能同样以理性在头脑中诱发信仰么?

泰勒决定在自己的大脑里植入一个单比特错误。如果他与利迪娅重逢的唯一机会是进天国的话,那么照此推论,他别无选择,只能设法使自己相信上帝。

一条可能的途径是让身体处于疲劳的状态,如饥饿、缺水,种种恶劣的自然环境。人体抵抗力下降时,错误比较容易出现。这是沙漠里的神秘主义者所用的方法。泰勒决定先试试这个。

他租了辆车,先往南开,然后折向东面,直到进入亚利桑那州与墨西哥交界处的索诺兰沙漠。他不断深入,到了公路的尽头便转为步行,一直走到自己也找不到归路的地方,又继续走了一段。最后他发现四周全是巨大的仙人掌,而且自己也够渴够饿了。于是他坐下来,静候身体支持不住的那一刻。

“恕我直言,”出发之前,欧文这么对他说,“我本来以为你成不了诗人,因为你缺乏想象力,但现在我发觉你的想象力多得有些过头了。”

在那之前的几周里,泰勒没见过欧文,因为他正把自己锁在家里,试图为利迪娅的死找到解释。欧文和他说话那会儿,他们正坐在最喜欢的那家咖啡店里。外面在下雨,是罕见的秋季暴雨。

“其实程序员并不只和数字打交道,”泰勒说,“我们用得最多的是语句。真正成天摆弄数字的是那帮搞硬件的。”