2024年Clojure状态调查!中分享您的想法。

欢迎!请参阅关于页面了解更多关于这是如何工作的信息。

0
编译器

嗨!

如何验证下一个Clojure版本在与上一版本的基本语言块(基本和特殊形式)语义上没有回归过程?

还是因为没有验证过程,因为基本语言块是不变的,无法更改?

非常有趣的是,Rich在早期Clojure版本有很多变化时如何发展,同时Clojure社区已经有数十个程序可能因向后不兼容的更改而损坏。

谢谢!

2 条回答

+1

编辑
 
最佳答案

一般来说,我们不改变语义,因此它们不会破坏。 :)

我们确实添加新的语义,有时将错误情况变为新的正常语义。我们避免破坏的第一方法是仔细思考我们在做什么,我知道这在软件开发中已经过时了,但我们有相当不错的记录。

从二进制兼容性角度来看,我们遵循一些政策。我们从不对可能被编译的Clojure代码调用的Java实现类进行更改(这主要是RT和Reflector中的代码)——尽管我们根据需要添加新的方法和arity。我们还对序列化更改以及引入对新技术函数调用的大纲有类似的政策。我们不能保证不同版本之间的二进制或序列化兼容性(但我们尽可能努力保持这一点)。

当然也有测试,尽管没有大量的测试直接检查编译,例如,因为所有Clojure代码都是编译的,所以这可以视为在所有测试中隐式检查。

0

Clojure自身有一个庞大的测试套件,社区在各个alpha和beta版本出现时对其进行测试。

在我工作的环境中,我们从Clojure 1.3 alpha版本开始,在测试周期中几乎将Clojure的每个预发布版都投入了生产。这是一个极其稳定的产物!

"Clojure自身的庞大测试套件"
你提到的是https://github.com/clojure/clojure/tree/master/test/clojure/test_clojure,对吧?

我可以看到许多stdlib的测试,也许我错过了什么,但我找不到Clojure语言构建块(基本和特殊形式)的测试,也找不到针对编译器的测试套件(我几乎不知道应该在那里测试什么)

我的意思是,如果编译器逻辑发生了变化,那么我们如何确保更改后的回归?
...