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

欢迎!请参阅关于页面以了解该服务的更多信息。

0
Clojure
设计讨论[这里|http://dev.clojure.org/display/design/Better+Error+Messages].

此补丁改进了Clojure对单个常见错误(在需要seq时传递了non-seq)的错误信息。更重要的是,它被设计为对未来其他类似改进的原型。

之前的错误信息


(cons 1 2)
=> IllegalArgumentException 不知如何从:java.lang.Long创建ISeq


之后的错误信息


user=> (cons 1 2)
ExceptionInfo 不知如何从:java.lang.Long创建ISeq
user=> (ex-data *e)
{:instance 2}


*补丁:* better-error-message-for-seq.patch
注意:此补丁已被回滚,因为它影响了RT.seqFrom().的内联。

6个答案

0
by

由:michaelklishin发表的评论

难道不是将其写成“不知如何从:2 (java.lang.Long)创建ISeq”更好吗?有多少初学者会知道存在ex-data以及如何使用它?

0
by

由:stu发表的评论

嗨,Michael,

ex-info信息一般不应该将其体中的东西打印出来。这提出了一个问题:print-length和print-level在用户没有良好控制的地方。而ex-info的主要目的是处理数据,而不是字符串。用户可以像他们喜欢的方式控制从ex-data打印出来。

让新手了解过期数据有两种可能的方式:在文档的一个(或几个地方)中告诉他们,或者在不计其数的地方说“这里本来可以用得上,但我们没用它是因为你可能不知道。”我倾向于前者。

话虽如此,我认为在文档中尽早提高新生摸对过期信息和过期数据的可见度很好,并且要确保像日志中的异常打印这样的功能足够灵活,不会失去过期数据的优势。

0

评论者:jafingerhut

这条评论说,这个修复在1.6.0版本之前提交,然后在1.6.0版本发布前很短的时间内撤销。我认为撤销的原因是对这种改变让某些相对常见的场景性能大约慢了5%表示担忧,并怀疑这可能影响了seqFrom方法的内联。

不确定是否应该重新打开工单。

0

评论者:gshayban

我认为我们现在可以重新审查这个问题。原始补丁将seqFrom方法从133字节更改为152字节(链接:https://groups.google.com/d/msg/clojure/K6W7DbxV0Cw/N3onXKkFVX8J 文本:正如在这里讨论的那样影响内联)。如果我们按照(链接:^CLJ-1099-better-error-message.txt)中提到的方式将异常构造移到一个方法中,该方法的长度就会变成100字节。

还有一类(链接:https://github.com/clojure/clojure/blob/8c402a8c9695a4eddc07cbbe0d95d44e1372f0bf/src/jvm/clojure/lang/RT.java#L853 文本:“faux 协议”调用具有类似的失败分支)类似的调用,将类似的方式从异常构造中提取出来可能会导致1)更好的带有错误数据的错误,2)更小的方法体

0

评论者:admin

希望能重新审查——新的补丁导致许多测试失败,所以它需要修复才能进行筛选。希望更改测试,以使它们对消息文本不那么脆弱。

0
...