jank 现在正在 LLVM IR 上运行

主要观点:过去几个月一直在开发 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_referencenamed_recursionAST 节点。
  • 启动性能提升方面,C++生成时编译clojure.core需 4 分钟,加载需 300ms,IR 生成时只需 2 秒和 150ms。
  • 构建系统改进中,bdwgc、fmt 等依赖需添加子模块并处理兼容性问题,预编译头文件导致 Clang 硬崩溃等。
  • 社区成员贡献包括 Unicode 词法分析、互操作性相关功能、延迟对象等。
  • 接下来要做的是修复 LLVM IR 生成 bug 和实现try节点的 IR 生成及错误报告。
阅读 6
0 条评论