2024年Clojure调查问卷!分享你的想法。

欢迎!请查看关于页面了解更多此程序如何工作。

0
Clojure

对于由TANAL派生出来的静态分析工具,通常很有用确定一个符号是用户定义的还是代码生成的结果。由于工具解析器依赖Clojure核心进行评估和符号生成,因此想要为生成的符号添加注释的用户目前必须提供一个绑定,将clojure.core/gensym替换为以下补丁等效的片段。这种重载对于TANAL、TE*或用户代码来说并不合适,因为这是对clojure.core行为的一种重定义,这种定义应该是标准的,而不是依赖于拥有撬棍的用户。

10 答案

0

由:gtrak发表评论

这最终可能有助于过滤掉来自CLJS中的reify的'd131045等定义的符号。我一直在使用autodoc-cljs的概念验证看到core.async命名空间中的这种行为,这最终可以针对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

从上面的评论中可以看出,这不是该补丁的最终版本,但顺带一提,我找到了一些自动化脚本来应用2014年6月9日的补丁0001-Annotate-generated-symbols-with-metadata.patch,但截至2014年7月1日最新版本的Clojure失败构建。

0

由:arrdem发表评论

谢谢Andy,我将在早上重做并测试它

0

由:arrdem发表评论

由于clojure.lang.Symbol/intern所做的工作,直接暴露和直接使用元数据构造函数没有意义。更新的补丁直接调用clojure.lang.Symbol/withMeta,而不是通过clojure.core/with-meta间接调用,并承担通过Var调用的性能损失。在我的系统上可以干净地构建。

0

评论者:jafingerhut

里德,尽管JIRA可以处理具有相同名称的多个附件,但它可能会使人们感到困惑,并且对于我的一些用于确定哪些修补程序可以应用和干净测试的脚本来说,可能会有些复杂。您能否将您的其中一个修补程序重命名一下?

0

由:arrdem发表评论

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

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