Programming languages try/catch/finally语法的起源 P>一个问题,词源向导:在今天的java/.NET语言中,谁首先使用了TIG/catch/java语法? < P>我相信它是C++,我认为Java/C++最后是为了资源清理而添加的(最后不是C++)。不幸的是我没有推荐人。。。然而

Programming languages try/catch/finally语法的起源 P>一个问题,词源向导:在今天的java/.NET语言中,谁首先使用了TIG/catch/java语法? < P>我相信它是C++,我认为Java/C++最后是为了资源清理而添加的(最后不是C++)。不幸的是我没有推荐人。。。然而,programming-languages,error-handling,language-history,Programming Languages,Error Handling,Language History,所有异常语法的整洁页面: 我相信它是C++的。如果不是这样的话,Stroustrup需要给予表扬。在他的论文中: 他没有提及任何影响,也没有引用他自己的任何其他材料。< P> C++是第一个引入异常的主要编程语言(最后,C++是不需要的,因为析构函数是确定性的)。从Stroustrup的论文中: 对C++的影响最大 异常处理设计是针对故障的工作−TeloLoad系统开始于大学 Brian Randell和他的同事在英格兰的纽卡斯尔,并在此后的许多地方继续 在Twitter上发布,与我共享: M

所有异常语法的整洁页面:

我相信它是C++的。如果不是这样的话,Stroustrup需要给予表扬。在他的论文中:
他没有提及任何影响,也没有引用他自己的任何其他材料。

< P> C++是第一个引入异常的主要编程语言(最后,C++是不需要的,因为析构函数是确定性的)。从Stroustrup的论文中:

<>对C++的影响最大 异常处理设计是针对故障的工作−TeloLoad系统开始于大学 Brian Randell和他的同事在英格兰的纽卡斯尔,并在此后的许多地方继续

在Twitter上发布,与我共享:

MacLisp添加了函数
ERR
,表示出现错误。如果在
ERRSET
窗体的动态上下文中调用
ERR
,则
ERR
的参数将作为
ERRSET
窗体的值返回

程序员很快开始使用
ERRSET
ERR
不是为了捕捉错误和发出错误信号,而是为了更一般的控制目的(动态非本地出口)。不幸的是,
ERRSET
的这种使用也悄悄地捕获了意外错误,使程序更难调试。1972年6月,一对新的原语,
CATCH
THROW
,被引入MacLisp[emphasis mine],以便
ERRSET
可以保留用于错误捕获

ERRSET
CATCH
这一课很重要。
ERRSET
和后来的
ERR
的设计者考虑到了一种特殊情况,并定义了一对原语来解决这种情况。但由于这些工具提供了有用和强大的功能(错误捕获和动态非本地出口)的组合,程序员开始以非预期的方式使用这些工具。然后,设计师不得不回去,用可选的界面将所需的内容分割成若干部分。这种精心设计、无意使用以及后来重新设计的模式在Lisp的发展过程中很常见

-来自盖伊·斯蒂尔和理查德·加布里埃尔的《口齿不清的演变》

资料来源:

盖伊·斯蒂尔(Guy Steele)和理查德·加布里埃尔(Richard Gabriel)的《Lisp的演变》;迈克·菲克斯(@mfikes)
> p>普通LISP早于C++,且基于早期LISPs。当然,Java是由非常了解这一点的Lisp人创建的。但是Java是被C语言污染的Lisp语言,所以他们也添加了检查异常规范


CommonLisp更进一步,实际上使catch能够与抛出例程交互,包括告诉抛出继续。直到捕捉完成,这堆东西才被解开。这意味着你可以发出低内存和投掷失败等警告。

在C++中没有<代码>最后< /C> >,是吗?我认为Erlang尝试/捕获/在C++的任何使用之后,但我没有一个好的。reference@ChrisDodd很容易看出这不太可能(在c++之前是erlang)erlang:第一个版本是Joe Armstrong在1986开发的。“C++:它是由Bjarne Stroustrup在1979开始开发的”——从WikIaGa中,你引用的文件是关于一个特定的实现技术。C++中的异常比那个更老(参见引用的)。异常比C++还要多十年,但我不知道谁引入了精确的语法。很好的讨论,谢谢各位。这个问题是因为<代码>尝试::MIG/<代码>,Perl模块,是该领域异常处理的事实标准之一,利用了<代码>尝试< /COD> >代码> catch < /COD> ->代码>鳍。ally语法,但给出了完全不同的语义。我想确保在我对其进行论述之前,我清楚地了解了我的历史。定义“major”。Lisp通过
unwind protect
进行了异常处理,当然使用了非常不同的语法。和中有更多可识别的异常,但关键字不同(不是
尝试
捕获
)“吉尔斯:问题非常具体:最后一个例外,我尝试了最后一个语法。我也得到了@吉利斯。他显然没有读到这个问题。是的,我只是反对你的第一个句子,这是对问题的切线,但是是错误的。”吉尔斯,如果你逐字地解释这个问题,那么C++就没有最终的结果,所以它是不相关的。Java出现在.Net之前。但我怀疑提问者是否知道还有其他异常处理系统,丢失解释更为相关。哦,它已经在2014年4月13日出现在维基百科上:(diff:)你是在查询非常具体的尝试/捕获/最终语法,还是在它们后面的概念?如果前者,C++没有最终的结果,那么.NET是在java之后出现的。如果后者比Lisp早了一段时间。