从生产代码中删除断言的典型理由是性能.这对我来说没有意义.是的,从性能至关重要的5%左右的代码中删除一些断言可能是一个有用的优化.然而,对于其他95%,它们可能没有可测量的影
我在D中编写了大部分编程,它有一个enforce()函数,它基本上完成了assert()的功能,除了它保留在发布版本中.我通常发现自己大部分时间都在使用enforce(),而assert()仅在一些执行()太昂贵的地方.
除了性能之外还有其他任何原因可以从发布版本中删除断言吗?如果没有,为什么语言不会使断言的默认行为始终在发布版本中执行,并提供更冗长,更难记忆的第二个函数,例如在发布版本中剥离的expensiveAssert()并推荐它仅用于代码的性能关键部分?
我认为assert()首先是一个纯粹的开发工具.最终用户的软件应提供某种错误处理(通过记录和/或向用户显示消息). assert()不提供错误处理.
但是,我通常使用自己的发布和调试断言函数.发布和调试断言仅用于异常错误 – 这种情况永远不会发生.但是它们提供了有用的错误消息(对开发人员有用,通常对最终用户没那么有用).
可能发生的错误(输入/输出,错误配置,……)被明确处理并向用户发送消息.