crazy pony
在Wallaroo Labs (我是工程副总裁),我们正在构建以Pony编程语言编写的高性能,分布式流处理器 。 大多数人都没有听说过Pony,但是对于Wallaroo而言,这是一个绝佳的选择,对于您的下一个项目,它也可能是绝佳的选择。
“编程语言只是另一种工具。它与语法无关。与表达性无关。与范式或模型无关。与管理难题有关。” —小马的创造者西尔万·克莱布施(Sylvan Clebsch)
我是Pony项目的贡献者,但在这里我将探讨为何Pony是Wallaroo等应用程序的不错选择,并分享了我使用Pony的方式。 如果您有兴趣更深入地了解我们为什么使用Pony编写Wallaroo,我们有一篇有关此的博客文章 。
什么是小马?
您可以将Pony视为“ Rust遇见Erlang”之类的东西。 小马具有令人赞叹的功能。 它是:
- 类型安全
- 记忆安全
- 异常安全
- 无数据争用
- 无死锁
此外,它已编译为高效的本机代码,并且是公开开发的,并获得了两节BSD许可。
这是很多功能,但是在这里,我将重点介绍对我公司采用Pony至关重要的几个功能。
为什么选择小马?
使用我们现有的大多数工具,编写快速,安全,高效,高度并发的程序并不容易。 “快速,高效和高度并发”是可以实现的目标,但是投入“安全”将使工作变得困难得多。 有了Wallaroo,我们希望完成这四个目标,而Pony使其易于实现。
高度并发
Pony使并发变得容易。 它做到这一点的部分方法是提供一个自以为是的并发案例。 在Pony中,所有并发都是通过actor模型进行的 。
演员模型通过Erlang和Akka的实现最为著名。 参与者模型自1970年代就已经存在,并且细节因实施而异。 不变的是,所有计算均由通过异步消息传递进行通信的参与者执行。
这样考虑参与者模型:面向对象编程中的对象是状态+同步方法,参与者是状态+异步方法。
当演员收到消息时,它将执行相应的方法。 该方法可能会在只能由该参与者访问的状态下运行。 参与者模型允许我们以并发安全的方式使用可变状态。 每个参与者都是单线程的。 actor中的两种方法永远不会同时运行。 这意味着,在给定的参与者中,数据更新不会导致数据争用或其他通常与线程和可变状态相关的问题。
快速高效
小马演员可以使用有效的偷窃工作计划器进行调度。 每个可用CPU都有一个Pony调度程序。 每内核线程并发模型是Pony尝试与CPU协同工作以尽可能高效地运行的一部分。 Pony运行时尝试尽可能地友好CPU缓存。 您的代码对缓存的影响越少,运行效果越好。 Pony旨在帮助您的代码在CPU缓存中发挥出色。
安全
Pony类型系统引入了一个新颖的概念:参考功能,使数据安全成为类型系统的一部分。 Pony中每个变量的类型都包含有关如何在参与者之间共享数据的信息。 Pony编译器使用该信息在编译时验证您的代码是否没有数据争用和死锁。
如果听起来有点像Rust,那是因为。 Pony的参考功能和Rust的借阅检查器均提供数据安全性。 他们只是以不同的方式来对待它,并且有不同的权衡。
小马适合您吗?
很难决定是否对非爱好项目使用新的编程语言。 与其他解决方案相比,您必须权衡该工具的不成熟性和适当性。 那么,小马和你呢?
如果您要解决硬并发问题,那么Pony可能是正确的解决方案。 并发申请是Pony的理由。 如果您可以在单线程Python脚本中完成所需的操作,则可能不需要Pony。 如果您遇到了严重的并发问题,则应考虑使用Pony及其强大的无数据争用,并发感知类型系统。
您将获得一个编译器,该编译器将防止您引入许多与并发相关的错误,并且运行时将为您提供出色的性能特征。
Pony入门
如果您准备开始使用Pony,则首次访问应该是Pony网站的“ 学习”部分 。 在这里,您会找到安装Pony编译器的说明以及用于学习该语言的资源。
如果您想为您使用的语言做出贡献,请在GitHub上等待一些对初学者友好的问题 。
另外,我等不及要在我们的IRC频道和Pony邮件列表上与您交谈。
要了解有关Pony的更多信息,请参加2018年7月16日至19日在俄勒冈州波特兰举行的第20届OSCON上 ,肖恩·艾伦(Sean Allen)的演讲: Pony:我如何学会不再担心并接受未经验证的技术 。
crazy pony