主要观点:两个月的无缝 C++互操作性工作取得进展,介绍了 jank 实现无缝互操作性的方式、相关测试、新功能(如自由函数、成员函数、成员访问、引用、运算符等)、指导计划及后续计划,还呼吁大家参与帮助。
关键信息:
- jank 借助 Clang 和 CppInterOp 实现 C++互操作性,是首个达到此无缝性的 Lisp 和支持 AOT 编译与交错 C++IR 的动态类型语言。
- 有多种测试套件,包括词法分析/语法分析(功能测试)、分析/代码生成(功能测试)、端到端(系统测试)、杂项(单元测试)和 clojure-test-suite。
- 新增了自由函数、成员函数、成员访问、引用和运算符等 C++互操作性相关功能。
- 有四位学员在 jank 上工作,包括 Saket 实现全 AOT 可执行文件构建、Monty 实现直接链接、Jianling 增加大整数支持和改进 IR 生成、Shantanu 改善错误处理。
- 后续计划包括处理手动内存管理、更好的模板支持、确保 C++析构函数保证适用于 jank、进一步测试稳定代码库和提高可移植性。
重要细节: - 测试对于构建复杂的 jank 至关重要,新测试覆盖了 C++互操作性的新功能。
- 各种测试套件以不同方式专注于测试,如 C++的功能测试、由 C++驱动的系统测试、端到端系统测试、单元测试和 Clojure 的测试套件。
- 成员函数调用有隐式
this
参数,可根据 constness 和 ref-qualifier 重载,且有不同的访问权限。 - C++的引用很复杂,从互操作性角度处理困难,jank 目前已覆盖大部分场景但仍有边缘情况需处理。
- 支持 45 种 C++运算符,许多可重载,部分 C++库利用此实现更具表达力的代码。
- 可通过加入 Slack 社区、在 GitHub 参与讨论或成为赞助者等方式帮助 jank 发展。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。