error vs exception
在设计层面错误和异常代表了两种概念,实现上没有抽象概念,异常和错误实际上是抽象层面的事情。
假设错误代表了意外,那么异常可以理解一种可控的意外。
从 CPU 什么或者从汇编层面上来说,不存在错误和异常。因为哪怕就是一个浮点计算错误或许被零除 CPU 实际上操作系统对这个事情都是有预案的,它并没有导致计算机崩溃。
那也就是不管 CPU,还是操作系统对这个事都有一个预案,那么我们可不可以认为根本不存在错误和异常,在实现层面上没有这种东西。如果底层没有这种东西的话,那我们实际上就得放弃从底层来研究这些东西。
错误或者异常实际上可以看成第二种控制流。我们正常一个流控制是一条线,因为种种原因会发生另外一种条件。比如需要的文件找不着了、访问非法内存。在这里面隐隐约约会出现第二套控制流,实际上错误或者异常是备用逻辑、冗余方案,它本身也是正常的操作。
操作系统为了保护自己会阻止一些事情违反了它的保护的一些机制,违反约定,对操作系统来说,它会触发它另外一套机制,那显然是一种非常正常的逻辑,无非不受我们控制。
某些的情况下,我们是很难捕获到一些什么系统层面的异常,比如 runtime 层面 OS 层面的一些异常,这种异常最终是被权限级别更高的运行时或者操作系统捕获,同时我们捕获我们需要控制的东西。
所以从这一点上来说,