Pony 编程语言简介

Pony,一种 “Rust 遇见 Erlang” 的语言,使开发快速、安全、高效和高度并发的程序变得更容易。
313 位读者喜欢这篇文章。
Best of Opensource.com: Programming

Zagrev 来自 Flickr。 CC BY-SA 2.0

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:我如何学会停止担忧并拥抱未经证实的技术

标签
Avatar
Sean 是 Wallaroo Labs 的工程副总裁,也是 Pony 核心团队的成员。 他喜欢编程语言、分布式计算、Hiwatt 放大器和 Fender Telecaster 电吉他。 他不喜欢蛋黄酱、搅拌酸奶和糟糕的代码。 他是《Storm Applied》的作者之一。

6 条评论

第一个打击:一个编程语言推介,其中不包含任何代码示例。
第二个打击:实际上,在主页、“发现”页面,一直到 FAQ 都没有代码示例。
第三个打击:但是它*确实*有一个行为准则,它与所有 “安全性” 非常吻合,导致听起来太像一种企业友好的束缚和纪律语言 (http://catb.org/jargon/html/B/bondage-and-discipline-language.html)。

或者,另一种看待文章和主页的方式...

一个专注于关键设计特性的编程语言推介 - 完成!

一个组织良好的网站,将代码留给 “学习” 页面,语言元素在那里得到了很好的解释 - 完成!

行为准则,主要以礼貌、建设性和专业的方式征求参与 - 完成!

回复 ,作者是 Erez Schatz

从营销角度来看,这些都是很好的点。 但我站在开发者-营销人员线的另一边,对我来说,看到对营销的重视程度与 “给我看代码” 的缺乏程度正是我不再次关注它的原因。

回复 ,作者是 clhermansen

一篇信息量丰富的博客文章。
现在是进入科技行业的绝佳时机 - 特别是如果您喜欢编程。 有这么多非常令人兴奋的语言。 一旦 Nim 达到 1.0,我就已经关注它了,还有 Crystal 及其出色的 Web 框架(Geany、Amber、Kemal)。
但现在我正在通过一个非常出色的 Udemy 课程慢慢学习 Julia。 我只需要分配更多时间。
哦,Kotlin 看起来也不错,但我想知道 Kotlin.Native 最终是否会在未来交付成果。 那真的会改变局面。

对我来说,Nim 十分令人震惊。 我一直在关注论坛。 而且,我们不要忘记类 Delphi 的 FreePascal/Lazarus IDE 庞然大物。 我想我会在未来更多地投入其中,以便我可以毫不费力地开发跨平台 GUI 应用程序,其语法与我的内心息息相关,因为我是 Niklaus Wirth 的忠实粉丝。 ;-)

希望 Pony 会获得更多曝光,因为它似乎有一些非常好的功能。 但是……它的运行时执行速度快吗? 速度现在就是一切。 开发者想要一切! ;-)

我正在使用 Pony 运行时,您不会看到任何锁,一切都是使用无锁数据结构制成的。 我对 Pony 了解不多,但运行时非常棒。 Sylvan Clesch 完成了一项杰出的工作

© . All rights reserved.