一般来说,我们不改变语义,因此它们不会破坏。 :)
我们确实添加新的语义,有时将错误情况变为新的正常语义。我们避免破坏的第一方法是仔细思考我们在做什么,我知道这在软件开发中已经过时了,但我们有相当不错的记录。
从二进制兼容性角度来看,我们遵循一些政策。我们从不对可能被编译的Clojure代码调用的Java实现类进行更改(这主要是RT和Reflector中的代码)——尽管我们根据需要添加新的方法和arity。我们还对序列化更改以及引入对新技术函数调用的大纲有类似的政策。我们不能保证不同版本之间的二进制或序列化兼容性(但我们尽可能努力保持这一点)。
当然也有测试,尽管没有大量的测试直接检查编译,例如,因为所有Clojure代码都是编译的,所以这可以视为在所有测试中隐式检查。