【问题标题】:Who invented the throw/try/catch[/finally] kind of error handling?谁发明了 throw/try/catch[/finally] 类型的错误处理?
【发布时间】:2009-12-13 23:51:30
【问题描述】:

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

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

【问题讨论】:

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


【解决方案1】:

今天的 Common Lisp 条件系统是一个相对较新的系统。该设计基于以前的系统,但直到 80 年代后期 CLTL2 时才被包含在 Common Lisp 语言中。

我相信那本书中的条件章节对设计的历史和背景有相当多的评论,并参考了相关研究和类似系统的先前实现。

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-09-10
        • 2017-03-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-09-14
        相关资源
        最近更新 更多