一般来说,我们不更改语义,因此它们不会被破坏。 :)
我们确实增加了新的语义,有时将错误情况更改为新的有效语义。我们避免破坏的第一方法是深入研究我们在做什么,我知道这在软件开发中已经过时了,但我们有一个相当好的记录。
从二进制兼容性的角度来看,我们遵循一些政策。我们从不修改Java实现类(这主要是RT和Reflector)中被编译Clojure代码调用的修改,尽管根据需要我们会增加新的方法和arity。我们还在序列化更改和引入对新函数调用宏的宏方面有相似的政策。我们不保证版本之间的二进制或序列化兼容性(但我们尽力尽可能多地维持兼容性)。
当然,也有测试,尽管没有很多直接检查编译的测试,尽管所有Clojure代码都是编译的,所以所有测试都隐式地检查了这一点。