jank 的 C++ 互操作性的下一阶段

主要观点:两个月的无缝 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 发展。
阅读 9
0 条评论