在 Wallaroo Labs,我担任工程副总裁,我们正在构建一个用 Pony 编程语言编写的高性能分布式流处理器。 大多数人没有听说过 Pony,但它一直是 Wallaroo 的绝佳选择,并且它也可能是您下一个项目的绝佳选择。
“编程语言只是另一种工具。它与语法无关。它与表达性无关。它与范式或模型无关。它关乎管理难题。” ——Sylvan Clebsch,Pony 的创建者
我是 Pony 项目的贡献者,但在这里我将介绍为什么 Pony 对于像 Wallaroo 这样的应用程序来说是一个不错的选择,并分享我使用 Pony 的方式。 如果您有兴趣更深入地了解我们为什么使用 Pony 编写 Wallaroo,我们有一篇相关的博客文章。
什么是 Pony?
您可以将 Pony 视为类似于 “Rust 遇见 Erlang” 的东西。 Pony 具有引人注目的功能。 它是
- 类型安全
- 内存安全
- 异常安全
- 无数据竞争
- 无死锁
此外,它被编译为高效的本地代码,并且它是在开放环境中开发的,并根据两条款 BSD 许可证提供。
这有很多功能,但在这里我将重点介绍其中几个关键功能,这些功能是我公司采用 Pony 的关键。
为什么选择 Pony?
使用我们现有的大多数工具编写快速、安全、高效、高度并发的程序并不容易。 “快速、高效和高度并发” 是一个可以实现的目标,但加上 “安全”,事情就变得更加困难。 对于 Wallaroo,我们希望实现所有这四个目标,而 Pony 使其易于实现。
高度并发
Pony 使并发变得容易。 它实现这一目标的部分方式是提供了一种有主见的并发方式。 在 Pony 中,所有并发都通过 actor 模型 实现。
actor 模型因 Erlang 和 Akka 中的实现而最为出名。 actor 模型自 1970 年代以来就已存在,并且实现细节因实现而异。 不变的是,所有计算都由通过异步消息传递进行通信的 actor 执行。
这样思考 actor 模型:面向对象编程中的对象是状态 + 同步方法,而 actor 是状态 + 异步方法。
当一个 actor 接收到消息时,它会执行相应的方法。 该方法可能对只有该 actor 才能访问的状态进行操作。 actor 模型允许我们以并发安全的方式使用可变状态。 每个 actor 都是单线程的。 一个 actor 内的两个方法永远不会并发运行。 这意味着,在给定的 actor 中,数据更新不会导致数据竞争或通常与线程和可变状态相关的其他问题。
快速且高效
Pony actor 使用高效的工作窃取调度器进行调度。 每个可用的 CPU 都有一个 Pony 调度器。 每个核心一个线程的并发模型是 Pony 尝试与 CPU 协同工作以尽可能高效地运行的一部分。 Pony 运行时尝试尽可能地对 CPU 缓存友好。 您的代码刷新缓存的次数越少,它运行得越好。 Pony 旨在帮助您的代码与 CPU 缓存良好配合。
Pony 运行时还具有每个 actor 的堆,以便在垃圾回收期间,不会有 “停止世界” 的垃圾回收步骤。 这意味着您的程序始终在进行至少一些工作。 因此,Pony 程序最终具有非常一致的性能和可预测的延迟。
安全
Pony 类型系统引入了一个新颖的概念:引用能力,这使得数据安全成为类型系统的一部分。 Pony 中每个变量的类型都包含有关数据如何在 actor 之间共享的信息。 Pony 编译器使用该信息在编译时验证您的代码是否无数据竞争和无死锁。
如果这听起来有点像 Rust,那是因为它确实如此。 Pony 的引用能力和 Rust 的借用检查器都提供数据安全性; 它们只是以不同的方式处理它,并且有不同的权衡。
Pony 适合您吗?
决定是否为非业余项目使用一种新的编程语言是很困难的。 您必须权衡该工具的适用性及其相对于其他解决方案的不成熟性。 那么,Pony 和您呢?
如果您有难以解决的并发问题,Pony 可能是正确的解决方案。 并发应用程序是 Pony 存在的理由。 如果您可以使用单线程 Python 脚本完成您想要的操作,您可能不需要 Pony。 如果您有难以解决的并发问题,您应该考虑 Pony 及其强大的无数据竞争、并发感知类型系统。
您将获得一个编译器,它可以防止您引入许多与并发相关的错误,并且运行时将为您提供出色的性能特征。
Pony 入门
如果您准备好开始使用 Pony,那么您首先应该访问 Pony 网站的学习部分。 在那里,您将找到安装 Pony 编译器的说明和学习该语言的资源。
如果您想为您正在使用的语言做贡献,我们在 GitHub 上有一些初学者友好的问题在等着您。
此外,我迫不及待地想在我们的 IRC 频道和Pony 邮件列表上与您交流。
要了解有关 Pony 的更多信息,请参加 Sean Allen 在 20th OSCON(2018 年 7 月 16 日至 19 日,俄勒冈州波特兰)上的演讲:Pony:我如何学会停止担忧并拥抱未经证实的技术。
6 条评论