Choral 编排式编程语言:节省 50% - 400% 代码量,提升分布式系统开发效率!

📅 2026/8/12 16:14:39
Choral 编排式编程语言:节省 50% - 400% 代码量,提升分布式系统开发效率!
简单解释版编写分布式系统程序很麻烦要协调多个通过副作用交互的程序手动控制副作用出错后找问题难测试工作也繁琐。Choral 能缓解这些问题可将分布式系统的协调过程作为单一程序编写。它对 Java 程序员友好扩展了 Java 语法将通信副作用封装在类型安全的抽象中让开发者专注高层次细节。若程序协调描述和实际实现不兼容Choral 编译器会报错并帮助解决。它还附带测试工具 ChoralUnit可轻松编写集成测试并在分布式系统上执行运行时测试。使用 Choral 编程简单能获得具有分散控制和强正确性保证的分布式系统还可可靠组合不同编译程序。语言特性若想大致了解 Choral 程序可先查看“Alice、Bob 和 Carol 参加会议”的示例。Choral 是面向对象语言其对象类型形式为 T(R1, ..., Rn)T 是对象接口R1, ..., Rn 是协作实现对象的角色。将角色融入数据类型使分布在类型层面体现。例如可编写程序在 Alice 和 Bob 处并行打印问候消息。通过调用能将数据从一个角色“移动”到另一个角色的方法可实现交互如 SymChannel 接口的 com 方法。Choral 不固定中间件只要满足编排程序的类型要求就可使用自己的通信实现和现有 Java 代码其类型系统会强制明确编排程序的通信要求。Alice、Bob 和 Carol 参加会议Alice 询问 Bob 是否能和 Carol 就 topic 开会Bob 先问 Carol 是否有空若 Carol 有空Bob 再考虑自己是否参加最后 Alice 从 Bob 处得知会议能否举行的结果。开发方法论即 Choral 的工作方式Choral 的设计目标是将编排程序生成为正确的 Java 库实现。其开发方法论如下将系统预期协调过程编写为 Choral 编排程序Choral 编译器为编排程序中每个角色生成 Java 库程序员在本地实现中使用这些库。例如对于 Alice、Bob 和 Carol 角色的编排程序编译器会为每个角色生成 Java 库提供 API 供程序员使用。Choral 带来了哪些优势节省时间在首批用例中Choral 让实现编排程序所需编写的代码行数减少了 50% 至近 400%。提高代码安全性编译器实现参与者本地行为避免编排程序实现中的各类错误生成的代码保证无死锁能让人全局了解角色协调方式易发现不一致之处。掌控库 API编译后的 Java 库的方法签名与源编排程序中的方法签名同态所见即所得。Choral 在业务流程、微服务、安全协议和一般分布式服务等领域有巨大应用潜力。相关文章若对编程语言感兴趣想了解 Choral 工作原理及与其他工作的关系可参考文章 [Choral: Object-oriented Choreographic Programming](https://dl.acm.org/doi/10.1145/3632398)。也可在 [Choreographic Programming Wikipedia article](https://en.wikipedia.org/wiki/Choreographic_programming)、[介绍编排式编程的博士论文](https://www.fabriziomontesi.com/files/choreographic-programming.pdf) 或 [编排式语言理论入门教材](https://doi.org/10.1017/9781108981491) 中了解编排式编程。[Ozone](https://github.com/dplyukhin/ozone) 是实验性库允许在 Choral 代码中安全使用 _futures_可编写并行处理请求或异步返回值的端点代码。可通过观看 [此视频](https://www.youtube.com/watch?v23y1WCdvMX4) 或阅读研究文章 [Ozone: Fully Out-of-Order Choreographies](https://doi.org/10.4230/LIPIcs.ECOOP.2024.31) 了解更多。[Real-World Choreographic Programming: Full-Duplex Asynchrony and Interoperability](https://doi.org/10.22152/programming-journal.org/2024/8/8) 首次用 Choral 开发了 [Internet Relay Chat (IRC)](https://en.wikipedia.org/wiki/IRC) 协议解决了全双工异步和互操作性问题。