在上一篇文章中,我与威廉·卡汉(William Kahan)一起去了只读的记忆巷。在同一次旅行中,Kahan告诉我他的第一份商业编程工作。该软件旨在通过帮助它节省,等待:电报费用来帮助跨加拿大航空公司(现为加拿大航空)的运营。为此,它是为了跟踪各种航班上可用的座位,更好地协调预订(大概减少了来回电报的不必要的询问)。

编写负责座位安排的软件的一部分是简单的部分。困难的部分是,该系统最多可以在5分钟内进行5分钟 - 而Kahan必须为示范做准备,毫不奇怪,持续时间明显超过5分钟。这就是为什么大多数程序都被保障措施,检查和恢复程序所采用的原因。有了这些,该程序将在更长的时间内无效。

保障措施是成功的。正如卡汉(Kahan)记得的那样,只有一个人哈维·盖尔曼,当它有一个胡思乱想的日子之一时,设法从那台计算机中获得有用的工作。

有了这段历史,Kahan一直关注计算机程序可能出错的一切并不奇怪。他得出的结论是,目前,计算世界总体上并没有很好地处理问题。

毕竟,当程序或程序的一部分遇到不可预见的情况时,会发生什么?程序员没有预期的一些传感器阅读?意外的浮点值?(我写过Kahan的一些例子,说明了真正奇怪的浮点行为内置错误:威廉·卡汉(William Kahan)和浮点算术

除非有人预见了这种特殊的问题,并竭尽全力为此做准备 - 就像Kahan在他的航空公司预订项目中所做的那样,该公约是要中止该计划,并且实际上被放弃了。

在1960年代,随着程序的批量运行,这可能是可以接受的。毕竟,如果一个程序崩溃了,那么下一个计划的程序将启动并做事。让程序控制复杂操作,并通过传感器输入,运行设备,不断需要某物为了保持控制,这些相同的惯例可能具有彻底的破坏性。

毕竟,它们可能意味着在程序中的某个未指定点,控制将跳到某个未指定的位置。而且不能保证该系统将知道如何处理这种突然的,随意的控制权。

卡汉强调,这不是学术练习。对他来说,最引人注目的例子是航空航班447航班,该公司于2009年6月1日坠毁。飞机的空气传感器冻结了,因此,自动驾驶仪的读数不一致时,自动驾驶仪完全批评了卡汉(Kahan以某种方式没有告诉他们发生了什么事。飞行员没有足够的时间进行询问,因为飞机停滞不前,几分钟后,撞到了海洋的表面,撞击并杀死了所有288名男女上的男女。

另一个例子是约克镇。引用本文(PDF)Kahan:

1997年9月21日,约克镇(Yorktown)在弗吉尼亚州查尔斯角(Cape Charles)海岸上行动,当时一名船员不小心进入空白领域进入数据库。空白被视为零,并导致数据库程序无法处理的划分划分异常。它已中止到操作系统Microsoft Windows NT 4.0,后者崩溃了,使所有船舶的LAN控制台和微型远程终端降低了。

结果:一艘相当大的战舰瘫痪了将近3个小时。幸运的是,在战斗和危险水域中都不是。

然后,有失败阿里亚妮51996年6月4日的飞行。导航系统的一部分遇到了无法应付的条件。系统的那一部分(负责跟踪火箭的速度和方向的变化),然后完全关闭,火箭崩溃了。

因此,人们不能只是期待会出问题的事情,并编写照顾事物的代码吗?说起来容易做起来难。Kahan指出了研究Westley Weimer, 谁 (这里乔治·尼库拉(George Necula)分析了数百万行(Java)代码,并在处理错误中发现了数百个错误 - 主要是错误处理程序,但未能正确地“清理”它们。

Kahan认为这是(大多数)当前编程语言中的基本缺陷。他认为应该以一种方式写语言力量程序员实施适当的程序来处理未经引起的情况。如果程序的一部分崩溃,则应将控制权交给其他程序,以报告出了什么问题。以及该计划的一部分收到该报告应包含一些处理情况的规定。

正在的语言编译- 编译器是将书面代码行转换为一个可以在计算机上运行的文件的软件,在此过程中捕获了一些编程错误 - 卡汉认为,应要求程序员说明程序员在每个部分中的每个实例中都发生了什么程序被另一个人的失败递给控制。如果程序员可以提出一些更好的预期意外方式,更好的默认方法,那么Kahan愿意得到纠正 - 但是,他认为,在那里,为了默认,如果程序员未指定其他任何内容,则程序的某些可预测行为。

很难实现这种基本变化。翻新所有旧软件不可能解决(即使是简单得多的东西,Y2K问题, 拿$ 300十亿个修复)。您希望最好的是获取现有编程语言的未来版本,以实现更安全的控制权。即使那样,您仍然可能与设计语言的人的不同理念(首先是各种编程语言的主要原因)。当涉及到将什么留给程序员以及通过编译器执行什么的问题时,不同的语言设计师可能会得出不同的结论。

卡汉(Kahan)引用了他认为典型的人的话:“当他们不使用最佳练习时,您正在谈论从自己的错误中拯救程序员。”

也许(我稍后再考虑)软件控制关键系统(例如飞机或导弹巡洋舰)的标准,应由法律定义 - 大概是管理建筑构建其他生命或死亡至关重要活动的基础知识的标准。

至少Vint Cerf,这次不是与他的Google VP或Internet先驱帽子一起使用,而是作为总裁计算机协会,答应立即跟进该问题卡汉(Kahan)在星期四在HLF举行的演讲。我们将看看情况如何。目前,卡汉仍然是沙漠中的先知。

..... .....

该博客文章源自第一博客的官方博客海德堡获奖论坛(HLF)于2013年9月22日至27日在德国海德堡举行。40 Abel,Fields和Turing获奖者将聚集在一起,与一组由200名年轻研究人员组成的小组。马库斯·波斯塞尔(MarkusPössel)是HLF博客团队的成员。请在HLF博客