分享您的想法,参加2024年Clojure现状调查!

欢迎!请访问关于页面了解有关该功能的一些更多信息。

0
编译器

嗨!

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

或者没有验证过程,因为这些基本语言块已经定稿,不能改变?

非常有趣,Rich是如何在早期Clojure版本有许多变化的同时,Clojure的社区已经有许多写的程序,这些程序可能会被不兼容的逆向更改所破坏。

谢谢!

2 答案

+1

编辑
 
最佳答案

一般情况下,我们不改变语义,所以它们不会中断。:)

我们确实添加了新的语义,有时将错误案例转换为新的工作语义。我们避免破坏的第一点是,我们非常认真地思考我们要做什么,我知道这已经过时了,但我们的记录相当不错。

从二进制兼容性的角度来看,我们遵循一些政策。我们从不更改可能导致编译后的Clojure代码调用的Java实现类中的更改(这主要是RT和Reflector中的代码)- 虽然根据需要我们确实会添加新的方法或arity。我们还在序列化更改和引入对全新函数调用宏方面有类似的政策。我们不保证各版本之间的二进制或序列化兼容性(但我们尽可能地保持该兼容性)。

当然,还有测试,尽管没有很多直接检查编译的测试,尽管所有Clojure代码都是编译的,因此这在所有测试中都是隐含检查的。

0

Clojure本身有一个广泛的测试套件,当各种alpha和beta版本出现时,社区会测试它们。

在我的工作场所,从大约13年前Clojure 1.3的alpha版本开始,我们将Clojure的几乎所有预发布版本都纳入我们的测试周期中。这是一个极其稳定的软件产品!

“Clojure本身的广泛测试套件”
你提到的是https://github.com/clojure/clojure/tree/master/test/clojure/test_clojure, 对吗?

我看到很多关于stdlib的测试,也许我遗漏了什么,但我找不到Clojure语言构建块(基本和特殊形式)的测试,也没有找到编译器的测试套件(我几乎不知道应该在哪里测试)

我的意思是,如果编译器的逻辑发生了变化,那么如何确保由于这个变化而没有引起回归?
...