几乎每个人都在使用它们,但包括我在内的许多人只是想当然地认为它们只是工作而已。
我在找高质量的材料。我使用的语言有: Java,C,C#,Python,C++,所以这些都是我最感兴趣的。
现在,C++可能是一个很好的起点,因为您可以使用该语言抛出任何东西。
而且,C语言也很接近汇编。如何使用纯C构造而不使用程序集来模拟异常?
最后,我听到一个谣言,谷歌员工出于速度考虑,在一些项目中不使用异常。这只是个谣言吗?没有它们,任何实质性的事情怎么能完成呢?
谢谢。
发布于 2010-01-04 02:18:45
下面是实现C++异常的一种常见方式:
http://www.codesourcery.com/public/cxx-abi/abi-eh.html
它适用于Itanium体系结构,但此处描述的实现也可用于其他体系结构。请注意,这是一个很长的文档,因为C++异常很复杂。
下面是LLVM如何实现异常的一个很好的描述:
http://llvm.org/docs/ExceptionHandling.html
由于LLVM旨在成为许多运行时的公共中间表示,因此所描述的机制可以应用于许多语言。
发布于 2010-01-04 02:14:19
C/C++编译器使用底层操作系统工具进行异常处理。在VM中,像.Net或Java这样的框架也依赖于OS工具。例如,在Windows中,真正繁重的任务是由结构化异常处理基础设施SEH完成的。您绝对应该阅读旧的参考文章:A Crash Course on the Depths of Win32™ Structured Exception Handling。
至于不使用异常的成本,它们是昂贵的,但与什么相比呢?与返回错误代码相比?在考虑到正确性和代码质量的成本之后,对于商业应用程序来说,异常总是会获胜。由于缺少几个非常关键的OS级函数,异常在总体上总是更好的。
最后但并非最不重要的一点是,使用异常进行流控制的反模式。异常应该是异常的,滥用异常进行流控制的代码将在性能上付出代价。
发布于 2010-01-04 02:08:45
通常是setjmp()
和longjmp()
。
异常捕获确实有不小的成本,但对于大多数目的来说,这并不是什么大问题。
https://stackoverflow.com/questions/1995734
复制相似问题