为什么断言是从生产版本(性能除外)中编译出来的?

dsi*_*cha 5 error-handling assert

从生产代码中删除断言的典型论据是性能。这对我来说没有意义。是的,从性能关键的 5% 左右的代码中剥离一些断言可能是一种有用的优化。然而,对于另外 95% 的人来说,它们可能没有可测量的效果,并且断言只会增加这样的可能性:如果您的代码有错误,它会以一种易于诊断的方式快速失败。

我的大部分编程都是在 D 中完成的,它的enforce()功能基本上可以完成相同的assert()功能,只是它保留在发布版本中。我通常发现自己enforce()大部分时间都在使用,而且assert()只在少数enforce()太贵的地方使用。

除了性能之外,还有其他原因从发布版本中删除断言吗?如果不是,为什么语言不让断言的默认行为即使在发布版本中也始终执行,并提供第二个更冗长且更难记住的函数,类似的东西expensiveAssert()从发布版本中删除并建议仅在代码中性能关键的部分?

Chr*_*ung 2

不仅如此。我认为在生产版本中保留断言会增加人们对什么文本(和/或源代码片段)最终出现在已发布的二进制文件中的偏执(想想如果它们最终出现在已发布的二进制文件中,代码注释会是什么样子!),这反过来又会增加人们的疑虑。不鼓励使用断言。

你的旅费可能会改变。