2024 Clojure 状态调查! 中分享您的观点。

欢迎!有关此功能的更多信息,请参阅 关于 页面。

0
Clojure

在文件 test/clojure/test_clojure/metadata.clj 中有一个名为 public-vars-with-docstrings-have-added 的 deftest,其目的是在公共变量未包含 :added 元数据时失败。

该测试将它们视为公共的,如果它们不是私有的,并且在已定义在 vector public-namespaces 中的任何命名空间中

自从 2010 年以来,该 public-namespaces vector 没有更新,因此省略了自那时以来添加的几个命名空间。

如果有任何添加更多命名空间到该列表的愿望,其中一些会造成测试失败。我将添加一个附件,其中包含所有命名空间中列出为缺失 :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

评论者:admin

让我们缩短到这些:[这里应该是链接,但未给定链接内容]

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

Patch clj-2519-v2.patch为Alex Miller在附件clj-2519-vars-to-update.txt中建议的所有列表项添加了:added元数据。

通过使用该发布的Clojure版本的REPL启动,验证我能否在该REPL中require命名空间和解析var,以及这些操作中的一种或两种在先前的发布的Clojure版本中失败,并确认所有此类元数据的版本号。希望我没有搞错任何。如果这有助于审查,我可以尝试写一个bash脚本来演示我看到的那些结果。

0

评论者:jafingerhut

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

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

我发现有24个公共变量可能没有正确设置版本号::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报告)
...