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

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

0
错误

有几个框架示例尝试将Java类名称反混淆为Clojure符号(包括命名空间);这在报告异常时写入改进的、特定于Clojure的堆栈跟踪很有用。

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

如果Clojure在这样的类上公开一个包含应在堆栈跟踪中出现的正确名称的静态final字段,将有助于此类框架的作者;库 then 可以使用反射来访问该字段的正确名称,无需当前猜测。

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

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

6答案

0

评论由:alexmiller 发表

通知,1.6中有一个新的补丁,在编译器中包含了一个新的反混淆函数。然而,由于混淆名称并不总是可逆的,因此保留原始名称是一个好主意。

0

评论由:jafingerhut 发表

亚历克斯提到的补丁附带了CLJ-1083。

0

评论由:jafingerhut 发表

Howard,这个工单与CLJ-1278之间似乎存在一些意图上的重叠。我认为两者中任何一个都可以独立完成,但我仍想确认一下。

0

评论者:dsg

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

一些注意事项

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

我欢迎任何关于这个如何真正工作的意见。特别是,任何关于如何最好地处理非顶层形式{{defn}}的想法。

0

评论由:jafingerhut 发表

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

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