作者在过去一个季度致力于改进 jank 的错误消息,以达到与 Clojure 错误报告的一致性并在可能的情况下进行改进。
- Clojure 错误报告现状:社区希望 Clojure 的错误报告得到改善,这在历年的调查中一直是期望改进的领域之一。
从零开始:三个月前,jank 的错误消息很糟糕,缺乏有用的源信息。而 Clojure 能提供文件、行和列等信息,jank 现在已能提供类似的有用错误消息。
- 源信息:在 Clojure 中,由于其解析器将令牌转换为数据结构后,部分对象不支持元数据,导致无法直接获取源信息。jank 通过重新解析来获取源信息,如对于
(def :foo 2)
,jank 会回到文件中重新解析获取:foo
的完整源信息。
- 源信息:在 Clojure 中,由于其解析器将令牌转换为数据结构后,部分对象不支持元数据,导致无法直接获取源信息。jank 通过重新解析来获取源信息,如对于
- 良好的 UI:作者在构建过程中列出了用户界面的重要部分,如人类可读的错误 ID、精确的源信息、突出显示的代码片段和相关注释等。并通过具体例子展示了 jank 在这些方面的优势,如在处理嵌套
#()
形式的错误时,jank 能准确指出错误位置并提供相关信息,而 Clojure 在这方面有所不足。 - 优雅的词法分析:jank 的代码片段突出显示基于其词法分析器,但会优雅地处理不正确的源代码,跳过无法正确词法分析的标记,继续突出显示下一个有效标记。
- JAR 源:Clojure 在报告错误时不特殊处理 JAR 源,jank 会特殊处理 JAR 文件,显示其 JAR 路径和文件路径。
- 宏:在报告 lisp 中的错误时,jank 能够跟踪宏中的源信息,提供更精确的错误消息,而 Clojure 则不具备此功能。对于不使用语法引用的宏,jank 会返回合成数据,无法提供具体的源信息。
- 不同的错误理解方式:jank 的错误报告方式可能与传统方式不同,它旨在提供连接相关代码的信息快照,帮助用户更快地理解问题源。
- 运行时错误:在程序运行时,jank 和 Clojure 都负责报告未捕获的异常,包括典型运行时异常、宏扩展异常和编译时异常,它们在处理方式上略有不同。jank 在某些方面仍在努力完善,如获取 JIT 编译帧的符号和源信息。
- 总结与展望:作者明确了 Clojure 可以改进的几个方面,也指出了 jank 仍存在的不足,并表示将继续改进。下一个季度,作者将专注于 jank 的无缝 C++互操作性。
- 寻求帮助:作者呼吁大家加入社区、参与设计讨论、成为赞助商或讨论企业赞助等,以帮助 jank 的发展。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。