单元安全

作者:Stan Kelly-Bootle

最近 NASA 在火星环境中屡次受挫提醒我们,尽管在学术风险分析和软件开发方面取得了许多“可证明的”(谁说的?)进展,但我们的实际工作仍然会受到最奇怪的故障的影响。根据定义,事故发生在生活的各个方面和旅程中,但一旦发生,事后审查就会发现这些事故是完全可以、甚至微不足道地“预防”的。下次,我们将自豪地宣称,我们将避免洒盐,绕过梯子下的香蕉皮,并固定住导致上次战争失败的松动的马蹄铁。更具体地说,在太空时代,我们将注意没有弹性的橡胶垫圈,避开轻率的全局标识符,并解决 FORTRAN FOR 循环的怪癖,所有这些都已被证明是对生命和金钱的威胁。

当然,深入研究时髦的后达尔文理论,我们必须承认“社会进化”,如果没有它,本专栏可能只会成为某个异国田野里神秘的巨石阵,这归功于一长串幸运的意外事件。有人说,随机的模因突变保证了更强壮的头骨、神经范式、语言、算法和软件工程方法的生存。无论我们是否自觉地从错误中“学习”,一些人认为,存在一个持续的自然“自我纠正”过程,该过程会收敛到无错误的涅槃。这太难了!当上一个千年开始时,“不可避免的进步”和“人类的完美性”的乐观概念(见注释)很难放弃,尽管替代方案是如此令人沮丧,从而导致了一种自我实现的“何必费心”的冷漠。

历史学家面临的挑战是选择和记录“重大”事件。所谓的随机因素(路德的便秘、拿破仑的失眠、希特勒被拒绝的水彩画......)似乎对 grand deéroulement 产生了荒谬而混乱的影响。我最喜欢的历史学家芭芭拉·图赫曼警告说,不要采用 post hoc 的偶然叙事,但不可能假装不知道接下来会发生什么。如果圣利努斯像比尔·盖茨一样拥有富裕的父母呢?如果他不是在瑞典-芬兰分形同语线中长大的呢?

火星探测器失事最昂贵、最令人尴尬的教训之一是缺乏“单元安全”。我们花了这么多年来确保类型安全(更不用说自相矛盾的线程安全),即如果不经过刻意的、徒劳的类型转换,就无法添加橙子和柠檬,但似乎给定的浮点值被解释为牛顿而不是。或者相反。或者是因为秒差距、米、码、链、杆、栖木和杆之间的容易理解的混淆?下次我们会做对的,除非有聪明的火星人急于抵抗我们落后的技术。

注释

Unit Safety
Stan Kelly-Bootle (skb@crl.com) 自 1950 年代在 EDSAC I(英国剑桥大学)的日子以来,一直在断断续续地进行计算。他曾在许多专栏(“比该死的帕特农神庙还要多”——Meilir Page-Jones)和书籍(包括《计算机矛盾词典》(麻省理工学院出版社)和UNIX Complete(Sybex))中评论了不变的 DP 场景。
加载 Disqus 评论