谁发明了throw/try/catch[/finally]这种错误处理方式?

15

这里的问题更多是历史性质而非实际应用:

  1. 它由谁发明?
  2. 哪种语言首先使用了它(以及程度如何)?
  3. 最初的想法是什么,潜在的概念是什么(当时需要解决哪些实际问题,欢迎提供论文)?
  4. LISP的条件系统是否是当前异常处理的祖先?

2
以某种重新打包的方式,这基本上是https://dev59.com/MnM_5IYBdhLWcg3wRw51的重复。 - mjv
谢谢!但我也希望得到第三和第四个问题的答案。 - Frunsi
3个回答

5
今天的Common Lisp条件系统是一个相对较新的系统。该设计基于以前的系统,但直到80年代末期,也就是CLTL2的时候才被包括在Common Lisp语言中。
我相信那本书中的条件章节对设计的历史和背景有相当多的评论,并提到了相关研究和类似系统的先前实现。

5
VAX CPU采用基于堆栈的异常处理系统。在每个调用帧中,都会分配一个32位单元并填充为0。如果被调用的子程序想要处理异常,它只需要在该单元中填入异常处理例程的地址即可。
当发生异常时,将进行堆栈搜索。这很容易,因为堆栈帧都是链接在一起的。第一个非零条目的堆栈帧将导致堆栈展开到该点,并调用异常处理程序。
我记得这是处理器针对高级语言的特性之一,但我不知道是否有高级语言利用了这个特性。我相信库代码使用了它,这可能是用汇编语言编写的。

0

这不是回到了C语言中的setjmp,longjmp函数吗?Richie,Kernighan等人?


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接