主要观点:过去几个月一直在开发 jank 的 LLVM IR 生成、改进语义分析和推进模块加载系统,感谢 Github 赞助商和 Clojurists Together。主要工作包括填充 LLVM IR 生成、处理命名递归、提升启动性能(从 12 秒到 150ms)、改进构建系统和互操作性、社区成员的贡献等,接下来要修复 LLVM IR 生成的剩余 bug 并实现try
节点的 IR 生成及错误报告。
关键信息:
- 过去几个月重点是填充 LLVM IR 生成,除
try
外其他 AST 节点都有工作且测试过的 IR 生成。 - 命名递归在 Clojure 和 jank 中通过函数自身名处理,在 LLVM IR 生成中需创建新的 AST 节点。
- 生成 LLVM IR 主要是因为 C++编译太慢,现在从源编译
clojure.core
只需 2 秒,加载对象文件只需 150ms。 - 移除 vcpkg 并处理其依赖,添加七个新的 git 子模块,移除预编译头文件后可按需编译。
- 社区成员 Monty Bichouna 完成 Unicode 词法分析支持,Saket Patel 实现接受路径等功能,Jianling Zhong 添加比率对象等,Paula Gearon 在相关项目上取得进展。
重要细节: - 在处理命名递归时,为适应 LLVM IR 生成,添加了
recursion_reference
和named_recursion
AST 节点。 - 启动性能提升方面,C++生成时编译
clojure.core
需 4 分钟,加载需 300ms,IR 生成时只需 2 秒和 150ms。 - 构建系统改进中,bdwgc、fmt 等依赖需添加子模块并处理兼容性问题,预编译头文件导致 Clang 硬崩溃等。
- 社区成员贡献包括 Unicode 词法分析、互操作性相关功能、延迟对象等。
- 接下来要做的是修复 LLVM IR 生成 bug 和实现
try
节点的 IR 生成及错误报告。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。