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

欢迎!请参阅关于页面获取更多如何使用本站的信息。

0
编译器

嗨!

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

或者,因为没有验证过程,基本语言块被冻结,不可能发生变化?

非常有趣的是,Rich在早期的Clojure版本中如何演变,当时有很多变化,同时Clojure社区已经有数十个程序被反向不兼容的改变破坏。

谢谢!

2 个答案

+1

编辑
 
最佳答案

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

我们确实增加了新的语义,有时将错误情况更改为新的有效语义。我们避免破坏的第一方法是深入研究我们在做什么,我知道这在软件开发中已经过时了,但我们有一个相当好的记录。

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

当然,也有测试,尽管没有很多直接检查编译的测试,尽管所有Clojure代码都是编译的,所以所有测试都隐式地检查了这一点。

0

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

在我工作的环境中,我们几乎将Clojure的每一个预发布版本都作为我们的测试周期的一部分投入生产,自Clojure 1.3alpha以来已经过去了13年。这是一个极稳定的产品!

"为Clojure本身的广泛测试套件"
您谈到的https://github.com/clojure/clojure/tree/master/test/clojure/test_clojure, 对吗?

我可以看到很多stdlib测试,也许我遗漏了什么,但是我找不到Clojure语言构建块(基本和特殊形式)的测试,也找不到编译器的测试套件(我很难理解那里确切应该测试什么)。

我的意思是,如果编译器的逻辑发生了变化,那么如何确保因该变化而没有回归
...