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

欢迎!有关如何工作的更多信息,请参阅关于页面。

0
错误

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

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

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

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

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

6 个答案

0

由:alexmiller

请注意,为1.6版本提供的补丁中包含编译器的新去混淆函数。但是,混淆的名称不一定总是可逆的,因此保留原来的名称是个好主意。

0

评论文本由:jafingerhut 发布

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

0
by

评论文本由:jafingerhut 发布

Howard,这个任务与CLJ-1278似乎存在重叠。我认为它们其中之一可能可以独立完成,但想确认一下。

0
by

评论文本由:dsg 发布

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

一些备注

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

欢迎对如何真正实现这一功能的任何意见。特别是关于如何最好处理非顶层形式的{{defn}}的任何想法。

0
by

评论文本由:jafingerhut 发布

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

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