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

欢迎!请查看关于页面以获取更多关于此功能的工作信息。

0
错误

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

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

如果 Clojure 在此类上公开一个具有适当名称的静态最终字段,将有助于此类框架的作者;库将能够使用反射来访问该字段的适当名称,而不进行当前的猜测。

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

除了函数之外,其他 Clojure 类构造(如具象类型和协议实现)也将受益,尽管不太明显什么确切字符串值可以正确无歧义地识别类的作用。

6 答案

0

评论由:alexmiller 提出

供参考,目前有一个补丁即将发布 1.6 版本,其中包含 Compiler 中的新解谜函数。然而,munged 名称不一定可逆,因此保留原始名称是个好主意。

0

评论由:jafingerhut 提出

Alex 所提到的补丁已附加到 CLJ-1083。

0

评论由:jafingerhut 提出

Howard,这个工单和CLJ-1278之间似乎有一些意图上的重叠。我认为它们中的任何一个都可以在没有另一个的情况下完成,但我还是想确认一下。

0

评论由:dsg 提出

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

一些备注

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

我欢迎任何关于如何真正工作的输入。特别是关于如何最好地处理不是顶级形式的 {{defn}} 的想法。

0

评论由:jafingerhut 提出

修改补丁 CLJ-1284-store-demunged-names.patch(2014 年 8 月 20 日)在 2014 年 8 月 29 日对 Clojure 进行一些提交后不能干净地应用于最新的 master。我没有检查在那一天之前是否可以干净地应用此补丁,也没有检查更新此补丁可能会多么容易或困难。

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