当前,`clojure.core/*assert*` 的默认值是 true
。
这对库的创建者用户有影响。
作为一个库的创建者,您不能在代码的任何地方随意添加断言来帮助您在开发/测试过程中,因为这会使大多数用户在生产中因为使用 *asserts*
而性能受影响。
作为库的消费者,由于您不知道使用了断言的库,因此您必须时刻记住关闭它们,以防万一。
由于在Clojure中全局禁用断言并不容易,因为 `assert` 是一个检查 *assert*
值的宏,因此需要在加载任何命名空间之前设置变量的值。
相反,Java 默认禁用所有断言,因此库创建者不必考虑这一点,而消费者可以在开发时通过提供 java -ea
(启用断言) 明确启用它们。
由于我猜更改 *assert*
的默认值可能由于向后兼容性问题而变得很棘手,所以我们可能会像Rust那样添加一个 `debug-assert`,默认情况下不会启用。
在我看来,重要的是拥有一个简单的符合条件的检查指令,我们知道它默认情况下不会影响性能,这样我们就可以为测试和开发硬化我们的代码库,而不必在默认情况下与生产性能相关耦合。
其他两个选项是更好的 assert 默认值,一个是 false
,另一个是 java.lang.Class desiredAssertionStatus()
返回的值,该值似乎取决于是否提供了 -ea
标志,默认情况下也是 false
。但是,由于大多数Clojure用户已经依赖于默认情况下 assert 为真,这可能不是一个可行的选项。