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

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

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

此补丁改进了Clojure对单个常见错误的消息:传递一个非序列以确保序列。更重要的是,它旨在作为未来其他类似改进的原型。

之前的错误消息


(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

评论者:michaelklishin

是否最好将其读作“无法从:2 (java.lang.Long) 创建ISeq”?有多少初学者会了解ex-data的存在以及如何使用它?

0

评论者:stu

嗨,迈克尔,

ex-info消息通常不应将其主体中的东西打印出来。这引发了打印长度和打印级别在哪里用户无法很好地控制的问题,而ex-info的整个目的就是进行数据处理,而不是字符串处理。用户可以根据自己的喜好控制从ex-data打印的内容。

让初学者了解ex-data有两种可能的方法:在一处(或几处)文档中告诉他们,或者在无限多处以以下方式提醒:“这里本可以使用,但因为我们不确定你是否了解,所以没有使用。”我倾向于前者。

话虽如此,我认为在文档中对初学者尽早提高ex-info和ex-data的可见性是很好的,并且要确保日志中的异常打印等特性足够灵活,以便不失去ex-info的优点。

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 文本:“伪协议”调用具有类似的失败分支)中,以类似的方式提取ex构造函数可能导致1)更好的错误数据和错误连接 2)更小的方法体

0

评论由:admin发布

我很乐意再次审视这个问题 - 新补丁导致许多测试失败,因此需要修复以通过筛选。更喜欢对消息文本较不脆弱的测试更改。

0
...