2024 Clojure 状态调查中分享您的看法!

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

0
Clojure

在 test/clojure/test_clojure/metadata.clj 文件中有一个名为 public-vars-with-docstrings-have-added 的 deftest,专门为了检测文件中的任何公开变量是否没有 :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

评论者: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 为 clj-2519-vars-to-update.txt 中 Alex Miller 建议的列表中所有内容添加了:added 元数据

我使用那个发布的 Clojure 版本的 REPL 启动了一个交互式解释器,并验证是否能够在那里 require 命名空间和解析变量,以及这些操作是否在先前的发布的 Clojure 版本中失败(或在那个版本的 Clojure 中命名空间甚至尚未存在)。希望我没有在这个过程中犯下任何错误。如果这有助于审查,我可以尝试编写一个bash脚本来演示我看到的成果。

0

评论者:jafingerhut

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

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

我发现了24个可能没有正确冒号版本号的公共变量,但它们都出现在冒号版本是“1.3”或更早版本的情况下,而修正后的版本也将是“1.3”或更早。是否有人有兴趣纠正其中的任何一个?

示例:这些变量都具有冒号版本“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具有冒号版本“1.0”,而inc'具有添加“1.2”,这是正确的。在1.3发布前一段时间,这两个函数定义的名称进行了交换,但冒号版本值仍然保持在函数实现体中,从那时起我们就有了冒号版本为“1.2”的inc和冒号版本为“1.0”的inc'。我相信对于名称末尾带有单引号的其他函数也是类似的。

0

评论者:admin

不在意

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