Pony 编程语言简介

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

Zagrev 在 Flickr 上。署名-相同方式共享 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 网站的 Learn section。在那里,您将找到安装 Pony 编译器的说明和学习该语言的资源。

如果您喜欢为正在使用的语言做出贡献,我们在 GitHub 上为您准备了一些 初学者友好的问题

此外,我迫不及待地想在 我们的 IRC 频道Pony 邮件列表上与您交谈。


要了解有关 Pony 的更多信息,请参加 Sean Allen 的演讲,Pony:我如何学会停止担忧并拥抱未经证实的技术,在 第 20 届 OSCON,2018 年 7 月 16 日至 19 日,俄勒冈州波特兰举行。

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

6 条评论

一击:编程语言推介,但没有代码示例。
二击:主页、 “discover” 页面,一直到 FAQ,实际上都没有代码示例。
三击:但它 *确实* 有行为准则,这与所有“安全”措施相得益彰,导致听起来太像企业友好的束缚和纪律语言 (http://catb.org/jargon/html/B/bondage-and-discipline-language.html)。

哦,拜托!带有代码示例的教程链接在文章的结尾。

回复 作者 Erez Schatz

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

一篇侧重于关键设计功能的编程语言推介 - 勾选!

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

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

回复 作者 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 完成了一项杰出的工作

知识共享许可协议本作品根据知识共享署名-相同方式共享 4.0 国际许可协议获得许可。
© . All rights reserved.