Categories
程式開發

后悔发明Null:堪称CS史上最严重错误,至少造成10亿美金损失


Null引用一直是个坏主意,从来没发挥过什么正面作用。

2020年是ALGOL 60的60周年诞辰。ALGOL 60让结构化编程真正落地,并为Pascal、C语言、B语言和Simula的出现打下了坚实基础,可以称之为是编程语言们的“祖父”。

Null的产生是由于1965年的一个偶然事件。

托尼·霍尔(Tony Hoare)是快速排序算法的创造者,也是图灵奖(计算机领域的诺贝尔奖)的获得者。他把 Null 添加到了ALGOL语言中,因为它看起来很实用而且容易实现。但几十年后,他后悔了。

Tony表示,1965年把Null引用加进ALGOL W时的想法非常简单,“就是因为这很容易实现。”

但如今再次谈到当初的决定时,他表示这是个价值十亿美元的大麻烦:

“ 我称之为我的十亿美元错误……当时,我正在设计第一个全面的类型系统,用于面向对象语言的引用。我的目标是确保所有对引用的使用都是绝对安全的,由编译器自动执行检查。但是我无法拒绝定义一个Null引用的诱惑,因为它实在太容易实现了。这导致了无法计数的错误、漏洞和系统崩溃。在过去的四十年里,这些问题可能已经造成了十亿美元的损失。”

编程语言的老祖宗诞辰60周年

在20世纪50年代,大部分代码是机器或汇编代码,而且每一台电脑都有自己的独特之处。第一代编程语言被称为“Autocode”,它们的存在是为了将一些问题(比如方程)编码并翻译成机器码,但不具备现今编程语言的大部分功能。更糟糕的是,它们的特性也不尽相同,导致系统的切换变得非常麻烦。当时国际信息处理联合会(IFIP)有一大堆委员会成员专门研究与计算相关的标准和问题。

原文链接:【https://www.infoq.cn/article/MRBBHeP0HNax04hgkPHQ】。未经作者许可,禁止转载。