ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

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

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?v=23y1WCdvMX4) 或阅读研究文章 [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) 协议,解决了全双工异步和互操作性问题。

返回列表