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

欢迎!请参阅关于页面以了解有关如何操作的更多信息。

0 点赞
编译器

嗨!

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

或者因为没有基本语言块被冻结以改变,所以没有验证过程吗?

非常有趣,Rich如何在早期Clojure版本中有很多变化的同时,Clojure的社区已经有成百上千个编写的程序可能会被向后兼容改变所破坏。

谢谢!

2 个回答

+1 点赞

编辑
 
最佳答案

一般来说,我们不更改语义,因此它们不会断裂。 :)

我们确实会添加新的语义,有时也将错误情况更改为新的有效语义。我们避免破坏的最主要的方法是,我们非常认真地考虑我们在做什么,我知道这在软件开发中已经不流行了,但我们的记录相当不错。

从二进制兼容性的角度来看,我们遵循一些政策。我们永远不会对可能被编译Clojure代码调用的Java实现类进行更改(这主要是RT和Reflector中的代码)——尽管我们根据需要添加新方法和arity。我们也对序列化更改和引入对新函数调用的大规破举有类似的政策。我们不保证不同版本间二进制或序列化兼容性(但是我们尽可能地维护这种兼容性)。

当然,还有测试,尽管没有很多直接检查编译的测试,但所有Clojure代码都是编译的,所以在所有测试中都隐式地进行了这项检查。

0 点赞

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

在我工作的公司,自Clojure 1.3 alpha版本近13年前以来,我们已经将Clojure的大多数预发布版本作为测试周期的一部分投入生产。这是一个极其稳定的产品!

"Clojure本身的庞大测试套件"
你说的那个是https://github.com/clojure/clojure/tree/master/test/clojure/test_clojure,对吗?

我可以看到很多关于stdlib的测试,也许我漏掉了什么,但我找不到Clojure语言构建块(基本和特殊形式)的测试,也找不到编译器的测试套件(我很难准确地说出应该在哪里进行测试)

我的意思是,如果编译器的逻辑发生了变化,那么如何确保不会因为这种变化而产生回归?
...