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

欢迎!有关更多信息,请参阅关于页面。

0
错误

目前函数实例在toString()中使用混合的Java名称打印

`
user=> (ns proj.util-fns)
nil
proj.util-fns=> (defn a->b [a] (inc a))

'proj.util-fns/a->b

proj.util-fns=> a->b

object[proj.util_fns$a__GT_b 0x141ba1f1 "proj.util_fns$a__GT_b@141ba1f1"]

`

出于调试目的,最好让函数toString()描述带Clojure倾向的fn名称。

方法:将原始名称存储在函数实例中,并在toString()中使用它,而不是返回类名。

`
proj.util-fns=> a->b

object[proj.util_fns$a__GT_b 0x47d1a507 "proj.util-fns/a->b(NO_SOURCE_FILE:2)"]

`

权衡:函数实例大小增加,用于函数名称。

修复:CLJ-1278-2.patch

13 答案

0

评论者:hlewisship

包含更改和更新的测试。关于这些更改是否会影响编译器性能或生成的代码大小,我没有任何详细信息。

0

评论者:jafingerhut

霍华德,很抱歉我对您修复中做出的更改没有更多有用的评论。目前,我只有关于其形式的几项小型评论。补丁的首选格式是使用此维基页面上的说明创建的: http://dev.clojure.org/display/community/Developing Patches

此外,您的补丁中有几个部分似乎仅更改了行中的空白。最好让这类更改超出建议补丁的范围。

0

评论者:hlewisship

是的,我直到之后都没有注意到空格的变化;我可能在某些时候按了重格式化,尽管我尽力了。我会很快制作一个新的补丁。

0

评论者:hlewisship

干净的补丁

0

评论者:hlewisship

仅供参考,已经过去一年了。正确的文件是 CLJ-1278-2.patch。

0

评论者:hlewisship

...嗯,最近有些变化。

`

 [java] FAIL in (fn-toString) (fn.clj:83)
 [java] nested functions
 [java] expected: (= (simple-name (.toString (factory-function))) (str "clojure.test-clojure.fn/" "factory-function/fn"))
 [java]   actual: (not (= "clojure.test-clojure.fn/factory-function/fn__7565" "clojure.test-clojure.fn/factory-function/fn"))
 [java]
 [java] FAIL in (fn-toString) (fn.clj:83)
 [java] nested functions
 [java] expected: (= (simple-name (.toString (named-factory-function))) (str "clojure.test-clojure.fn/" "named-factory-function/a-function-name"))
 [java]   actual: (not (= "clojure.test-clojure.fn/named-factory-function/a-function-name__7568" "clojure.test-clojure.fn/named-factory-function/a-function-name"))

`

如果有什么迹象表明我的补丁可能会被采用,我会愿意更新它。自从上次更新以来已经超过一年了。

0

评论者:jafingerhut

你所看到的行为变化很可能是因为对 CLJ-1330 缺陷的修复。

顺便问一下,我不是知道哪些票据是有趣的人。我知道这个票据获得了相当多的投票,而且按投票是排名前几的增强建议之一 - 在这个报告的“增强”部分下查看,或搜索 1330: http://jafingerhut.github.io/clj-ticket-status/CLJ-top-tickets-by-weighted-vote.html

即将加入 Clojure 1.7 的功能已经基本确定,还有相当多的其他修复和增强被推迟到 1.8。1 年以上的等待时间并不罕见,尤其是对于增强功能。

0

评论者:hlewisship

感谢提供信息;我不想表现得像个抱怨的人,但对于一个想帮助改进事物的人来说,“伟大的沉默”是有威慑力的。

我会更新我的补丁,并希望看到 1.8 的动态。

0

评论者:alexmiller

Clojure 有约 400 个未解决问题。作为一种打印增强,一般认为这比缺陷的优先级低。此外,该提案更改了编译器、字节码生成代码,并为生成对象添加了字段,这具有未评估的潜在广泛影响。这些因素的组合意味着我们可能需要一段时间才能着手查看。

您可以采取的有助于工作的事情:
1) 简化描述。来到这个问题的(筛选者和最终Rich)想要以最少的精力查看描述并获取最大限度的理解。如果我们没有看到这一点,我们有一些关于此事的指南在 http://dev.clojure.org/display/community/Creating Tickets。对于一个增强,一个短(1-2句子)的描述和可以在我可以运行在repl中的示例最好。然后是一个提案(同样,尽可能简短)。例如:CLJ-1529, CLJ-1325, CLJ-1378。对于像这样的增强,看到(简洁的)前后版本,用户会看到这种差异,通常是筛选者理解好处最快的方法。

2) 预测并去除障碍。如上所述,您正在更改每个函数对象的大小。对大小和构造时间有什么影响?提供数据和对测试工具的支持可以节省筛选者做这项工作。如果信息较多,最好将其添加到附件或注释中,并在描述中引用。

让其他人进行筛选(参见 http://dev.clojure.org/display/community/Screening Tickets )- 虽然筛选者(通常是我)将不得不重新进行这项工作,但在早期拥有更多的眼睛查看它有助于。在 #clojure 上请求其他人来查看,尝试它等。如果存在开放性问题,将其添加到描述中有助于指导我的工作。

0

评论者:hlewisship

Alex,感谢你的建议。我会跟进的。其中一些数据已经存在,但我会让它们更加突出。

我知道我 overwhelmed by Tapestry 问题列表中的问题数量(包括增强和微小改进),但我会理解问题空间。

0

评论者:[email protected]

您可以在像 AFn.java 这样的东西上实现 toString()。

`
public String toString() {

String name = getClass().getSimpleName();
return Compiler.demunge(name);

}
`

0

评论者:alexmiller

Munge+demunge是一个有损操作。将demunge视为“尽最大努力”,而不是可以依赖的东西。

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