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

欢迎!请参阅关于页面以获取更多关于该功能的信息。

0 投票
错误

有些框架试图将Java类名解耦为一个Clojure符号(包括命名空间),这在报告异常时输出改进的、特定于Clojure的堆栈跟踪时很有用。

现有的库基于正则表达式匹配和猜测,有时会给出错误的结果,例如,当命名空间或函数名实际上包含下划线时。

如果Clojure在此类上公开一个静态final字段,以便在堆栈跟踪中显示正确的名称,这将有助于这些框架的作者;库然后可以使用反射来访问字段的正确名称,而无需当前的猜测。

我建议将CLOJURE_SOURCE_NAME作为此类字段的合理名称。

除了函数之外的其他Clojure类构造,如具现类型和协议实现,也将从中受益,尽管不太清楚哪个精确的字符串值可以正确且明确地标识类的作用。

6 答案

0 投票

评论者:alexmiller

FYI,即将推出1.6版本的一个补丁,其中包含编译器中的新解耦合函数。然而,由于解耦的名称并非总是可逆的,所以保留原始名称是个好主意。

0 投票

评论者:jafingerhut

亚历克斯提到的补丁已附带在CLJ-1083上。

0 投票

评论者:jafingerhut

豪厄德,这个票和CLJ-1278之间似乎有些意图上的重叠。我想,它们中的一方可以在没有另一方的情况下完成,但是想核实一下。

0 投票

评论者:dsg

这是添加此功能的一个初步尝试。

一些说明

  • 这将标记由{{deftype}}和{{fn}}发出的类。
  • 这将处理被包围的{{fn}},但输出将与标准的{{demunge}}函数略有不同:只有初始的{{$}}被转换成了{{/}}。
  • 不幸的是,因为类型/记录构造函数的{{defn}}出现在一个{{let}}形式中,生成的符号与它应该匹配的符号不匹配。
  • 没有公开的API可以从类中获取拆除符号。也许{{demunge}}应该检查给定的名称是否对应于具有此字段的类?

我欢迎任何关于这一如何真正工作的建议。特别是,任何关于如何最好处理非顶层{{defn}}的想法。

0 投票

评论者:jafingerhut

日期为2014年8月20日的补丁CLJ-1284-store-demunged-names.patch在2014年8月29日对Clojure进行了某些提交后无法干净地应用于最新的master。我没有检查在此之前是否可以干净地应用此补丁,也没有检查更新此补丁可能有多容易或困难。

0 投票
参考:https://clojure.atlassian.net/browse/CLJ-1284(由hlewisship报告)
...