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

欢迎!请查看关于页面了解这个工作方式的相关更多信息。

0 投票
Clojure

在test/clojure/test_clojure/metadata.clj文件中,有一个名为public-vars-with-docstrings-have-added的测试,专门用于确保没有公共变量缺少:added元数据时失败。

该测试认为,如果一个变量不是私有的,并且在任何在public-namespaces向量中定义的命名空间中,那么它是公共的。

该public-namespaces向量自2010年以来没有更新,因此遗漏了此后添加的一些命名空间。

如果有人想将更多命名空间添加到该列表中,其中一些会导致测试失败。我将添加一个附件,其中包含所有命名空间中缺少:added元数据的变量列表,但我目前还没有关于应该考虑哪些命名空间以及故意排除哪些命名空间的建议(除了像clojure.parallel这样的已弃用命名空间)。

8 答案

0 投票

评论:jafingerhut

附件clj-2519-partial-v1.patch是我在本机上编译的差异文件。我不敢肯定它包含了Clojure 1.10的所有命名空间,但如果不是全部,也应该是接近的全部。

附件clj-2519-public-vars-without-added-meta.txt,与Clojure 1.10.1的发布源代码以及上面提到的补丁一起显示了在那些新命名空间中失败的公共变量列表,因为这些变量没有:added元数据。

0 投票
0 投票
_由:jafingerhut_发表的评论

谢谢列表! 正在追踪所有这些符号的正确:added 版本。

我相信,对于Clojure 1.0中存在的任何内容,我们都希望

{:added "1.0"}

而且没有理由确定它是在那一刻之前增加的?

示例符号:clojure.main/repl

另外:我正在使用不同版本的Clojure的REPL来确定符号是存在还是不存在,这似乎比查看git日志要快。 我猜我不应该这样做,但我还是有点惊讶,因为clj/clojure可以很好地启动Clojure 1.0.0 REPL。
0 投票

评论:admin

在1.0是对的 - 较早的版本应该是1.0。

clj只是运行你告诉它的clojure版本的clojure.main,而且REPL实际并没有真正改变(除了添加),所以我不会惊讶如果它根本不工作!:)

0 投票

评论:jafingerhut

补丁clj-2519-v2.patch为附集中的clj-2519-vars-to-update.txt中所有由Alex Miller建议的项目添加了:added元数据

我已通过使用那个发布的Clojure版本启动REPL,验证我能否在那里使用require命名空间和解析var,以及这些操作中有一个或两个失败于上一个发布的Clojure版本来验证所有这样的元数据的版本号。希望我没有弄错它们中的任何一个。如果这有助于审阅,我可以尝试编写一个bash脚本来演示我所看到的结果。

0 投票

评论:jafingerhut

好了,我将编写一个程序以检查我的:added注释是否具有正确的版本,并编写了一些代码来检查所有公共变量,或者至少是public-vars-with-docstrings-have-added dectest所做的那些,以查看它们在哪些发布的Clojure版本中成功解析,以及在哪些版本中它们不成功解析(或者它们的命名空间在那个Clojure版本中甚至还不存在)。

确保补丁clj-2519-v2.patch中的所有:added元数据都使用该程序确认了正确的版本号。

我发现有24个公共变量可能没有正确的:added版本号,但这些都是:added版本为"1.3"或更早的情况,修正后的版本也将是"1.3"或更早的版本。您有兴趣纠正其中任何一个吗?

示例:所有这些变量都有:added "1.0",但是这可能是从没有"-int"后缀的类似名称函数的实现中复制的。有"-int"后缀的名称实际上是添加在Clojure 1.3中的。

unchecked-add-int
unchecked-dec-int
unchecked-divide-int
unchecked-inc-int
unchecked-multiply-int
unchecked-negate-int
unchecked-remainder-int
unchecked-subtract-int

对于inc和inc',当inc'最初在Clojure 1.2之前很久很久被添加时,inc有:added "1.0",inc'有:added "1.2",这是正确的。在1.3发布之前不久,这两个函数定义中的名称被交换了,但是:added值仍然留在函数的实现体中,从那时起我们就有了:added "1.2"的inc和:added "1.0"的inc'。我相信对其他以单引号结尾的函数也是这样的。

0 投票

评论:admin

不予理会

0 投票
参考资料:https://clojure.atlassian.net/browse/CLJ-2519(由jafingerhut报告)
...