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

欢迎!请查阅 关于 页面以了解有关如何使用的更多信息。

0
Clojure

对于从 TANAL 衍生出的静态分析工具,通常很有用,可以确定一个符号是用户定义的还是代码生成的结果。由于分析工具依赖于 Clojure 内核进行评估和符号生成,因此想要注释生成的符号的用户目前必须提供绑定,用以下补丁的片段替换 clojure.core/gensym。这种重载对于 TANAL、TE* 或用户代码不合适,因为它是对 clojure.core 行为的重定义,应该是标准的,而不是受到工具的影响。

10 个答案

0

由 gtrak 发表的评论

这最终可能有助于过滤 out 定义符号如 't131045 来自 CLJS 的 reify。我已经在 autodoc-cljs 的 concept 中看到这种行为,这最终可以针对 tools.analyzer。

0

由 alexmiller 发表的评论

关于补丁,为什么不调用带有元数据的 Symbol 构造函数而不是 with-meta?出于性能考虑,还可能有助于使用相同的常量映射。

0

由 arrdem 发表的评论

因为编译器会将元数据映射作为静态字段发出,所以当前的补丁将会在所有标注符号之间共享同一个映射实例。调用元数据构造函数是合理的,我将更新补丁。

0

由 arrdem 发表的评论

因此,Symbol的元数据构造函数是私有的,请参见https://github.com/clojure/clojure/blob/master/src/jvm/clojure/lang/Symbol.java#L100。如果不直接更改,则无法从核心构建带有元数据的符号。如果您担心通过with-meta添加元数据时的Var间接开销,则with-meta是一种选择,但这样我们就无理由地构建了两个符号。公开目前私有的元数据构造函数可能是一个正确的修复,尽管它还需要自己的条目。

0

评论者:jafingerhut

从上面的评论来看,这并不是这个补丁的最终版本,但据我所知,我找到的自动脚本0001-Annotate-generated-symbols-with-metadata.patch,更改日期为2014年6月9日,可以顺利应用于2014年7月1日的最新Clojure master版本,但是Clojure构建失败。

0

由 arrdem 发表的评论

谢谢Andy,我会在早上重新处理并测试。

0

由 arrdem 发表的评论

由于clojure.lang.Symbol/intern所执行的工作,公开和直接使用元数据构造函数是没有意义的。更新的补丁直接调用clojure.lang.Symbol/withMeta,而不是通过clojure.core/with-meta间接调用,从而避免了调用Var的性能损失。在我的系统上可以顺利构建。

0

评论者:jafingerhut

Reid,尽管JIRA可以处理具有相同名称的多个附件,但对于一些人来说,这可能会有些令人困惑,对于一些我用来确定哪些补丁可以应用并彻底测试的脚本来说,也是如此。您介意将您的其中一个补丁重命名吗?

0

由 arrdem 发表的评论

这是对该补丁的第三次也是最后一次修改。

0
参考:[https://clojure.atlassian.net/browse/CLJ-1442](https://clojure.atlassian.net/browse/CLJ-1442)(由 arrdem 提出)
...