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

时间:2009-12-13 23:51:30

标签: exception exception-handling language-features theory language-design

我的问题更多是历史性的而不是实际的:

  1. 谁发明了它?
  2. 首先使用哪种语言(以及在何种程度上使用)?
  3. 最初的想法是什么,基本概念(这些天实际问题必须解决,欢迎论文)?
  4. LISPs condition system是当前异常处理的祖先吗?

3 个答案:

答案 0 :(得分:5)

今天的Common Lisp条件系统是一个相对较新的人。该设计基于以前的系统,但直到80年代后期CLTL2

时才被包含在Common Lisp语言中。

我认为该书中的条件章节对设计的历史和背景有相当多的评论,并提及相关研究和类似系统的先前实施。

答案 1 :(得分:4)

VAX CPU具有基于堆栈的异常处理系统。在每个调用帧中,分配一个32位单元并填充零。如果被调用的子例程想要处理异常,那么它所要做的只是用异常处理例程的地址填充该单元格。

发生异常时,将进行堆栈搜索。这很容易,因为堆栈框架都链接在一起。具有非零条目的第一个堆栈帧将导致堆栈展开到该点,并且将调用异常处理程序。

我记得这是针对更高级语言的处理器功能之一,但我不知道有更高级别的语言利用了该功能。我相信它是由库代码使用的,它可能是用汇编语言编写的。

答案 2 :(得分:0)

它不会回到C中的setjmp, longjmp函数吗? Richie,Kernighan,等人?