谁设计了例外?


22

异常和异常处理来自何处?

我喜欢.NET使用它的方式,喜欢C ++支持它的方式(但是不幸的是,库使用返回代码或用C编写)。我知道它在所有新语言中的标准都是多少,但是谁首先设计了它,或者它是从哪里来的呢?

C ++是使用它的第一语言吗?我不知道其他年龄更大的人。


7
显然,尽管第一个编译器直到大约50年后才出现,但Plankalkül在1940年代具有异常处理功能。(en.wikipedia.org/wiki/Plankalk%C3%BCl
FrustratedWithFormsDesigner

您可以说C ++是第一种向大众引入例外的非象牙塔语言。但是这个概念从一开始就存在(或者很长一段时间,请选择)。
马丁·约克

11
寻找某人勒死吗?我在开玩笑...
Mark Canlas

1
我们应该考虑硬件异常的影响吗?
rwong 2011年

1
@FrustratedWithFormsDesigner:我的下巴刚摔到地板上。我知道Konrad Zuse,但不知道。他是我们所有人的父亲。
鲍勃·墨菲

Answers:


20

引发和捕获异常已经有一段时间了。这个网站说例外是在PL / I中引入的:http : //www.math.grin.edu/~rebelsky/Courses/CS302/98S/Outlines/outline.02.html

根据此页面,它是1967年的(包括详尽的但不详尽的计算机语言和功能图表):http : //community.borland.com/article/0,1410,22741,00.html

许多语言都采用了这种技术-ADA,ALGOL,FORTRAN,ML [...]

这里引用。

Wikipedia更详细地介绍了PL / 1中的异常处理。该页面还提到PL / 1是第一页。当然,这不是科学证明:-)

至于亲自设计PL / 1的人,本文没有提及任何名称,仅提及IBM的各个委员会。


PL / I中的表现实际上是特定类型的事件。您可以定义和引发自己的事件,并编写事件处理程序以捕获它们。ISTR在某些系统工具(VTAM?)中对此提供了一些支持,因此您实际上可以编写事件驱动程序。
TMN

您能想到C ++之前的任何语言在堆栈展开时提供有序清理的功能吗?
2013年

FORTRAN的例外?来吧...
米哈尔Kosmulski

6

Hof,Mössenböck和Pirkelbauer(在其1997年的论文《使用元编程的零开销异常处理》)中肯定了异常的概念是在70年代提出的,指的是John B. Goodenough的1975年“ 异常处理:问题”以及《美国通信杂志》上的拟议注释文件。 ACM。在其中,他将现代异常处理与注册回调的一般思想相结合,并且他提出的表示法看起来比起来更像现代Attribute元数据规范try/catch,但它(至少是第2部分)很好地概述了异常处理的状态。七十年代中期。

也许值得一提的是Alef中raise/rescue机制,可以将其视为原始形式的块,以免我们认为它们是从Stroustroup的额头像宙斯的雅典娜一样完全形成的。catch


3
你读过以前的答案吗?它注明了1967 年的例外情况:比您提到的日期早八年
gna

4
我确实做了,但是我试图追溯C ++中异常出现与PL / I中ON CONDITION语句之间的一些历史。我想我的加入不受欢迎吗?
Wtrmute

1
实际上,有关异常处理的许多论文都引用了足够的文献作为概述,讨论及其对现代异常机制的影响-认为它具有开创性是合理的。另一方面,“异常处理”在许多语言中都有不同的语义,我希望在古德诺(Goodenough)发表之前,这是特别正确的。考虑到这一点,对此问题的保守回答也可以追溯到有条件的跳跃。
Thiago Silva

@gnat:您是否读过将这个想法追溯到1940年代的评论?即使该注释不存在,问题仍然是“异常来自何处?”,而不是“命名使用异常的最早日期”。
迈克尔·肖

@MichaelShaw我所指的答案已与您提到的评论同时发布,它还尝试解决所问的问题(“成为第一个”)。与之相反的是,该帖子未能承认明显可见的早期证据,甚至都没有试图解决这个问题
2013年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.