主要观点:在编程中关于不同“错误处理模型”的在线讨论存在很多混淆,因为常见的“错误处理模型”将两个(或更多)独立概念合并到一个系统中。
关键信息:
- 失败(Failures):系统因某些约束而无法执行某些动作,几乎总是无法证明在某些代码中永远不会发生,通常需通过尝试解决或修复源问题,或自行传达失败来处理。
- 错误(Mistakes):是代码中的缺陷,破坏显式和隐式的不变量,可证明在某些代码中不会发生,通常不希望绕过,而是以安全方式停止执行。
- 混淆(Confusion):失败和错误通常被混为“错误”,在静态分析中主要是错误,二者通过相同渠道传达,很多不变量检查与检查失败同时进行,导致错误处理方式被视为单一概念。
重要细节:如EINVAL
示例,内核在检查某些不变量后发现错误,后续会检查约束以确定是否可执行操作,不变量检查与约束检查在同一位置进行,错误和失败性质不同却被视为单一概念,作者希望引起他人思考是否应将其分离。
结论:分离这些概念可能有好处,但作者未提供解决方案,只是提出此问题希望引起关注。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。