一般来说,我们不更改语义,因此它们不会断裂。 :)
我们确实会添加新的语义,有时也将错误情况更改为新的有效语义。我们避免破坏的最主要的方法是,我们非常认真地考虑我们在做什么,我知道这在软件开发中已经不流行了,但我们的记录相当不错。
从二进制兼容性的角度来看,我们遵循一些政策。我们永远不会对可能被编译Clojure代码调用的Java实现类进行更改(这主要是RT和Reflector中的代码)——尽管我们根据需要添加新方法和arity。我们也对序列化更改和引入对新函数调用的大规破举有类似的政策。我们不保证不同版本间二进制或序列化兼容性(但是我们尽可能地维护这种兼容性)。
当然,还有测试,尽管没有很多直接检查编译的测试,但所有Clojure代码都是编译的,所以在所有测试中都隐式地进行了这项检查。