crazy pony_Pony编程语言简介
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:我如何学会不再担心并接受未经验证的技术 。
翻译自: https://opensource.com/article/18/5/pony
crazy pony
crazy pony_Pony编程语言简介相关推荐
- P4学习笔记(三)P4编程语言简介
文章目录 P4学习笔记(三)P4编程语言简介 基本数据类型 Typedef 声明和初始化变量 元数据 参考资料 P4学习笔记(三)P4编程语言简介 上图展示了P4语言主要结构,下面简单讲解一下P4的基 ...
- 国际计算机语言,国际标准的5种PLC编程语言简介
IEC1131-3为PLC制定了5种标准的编程语言,包括图形化编程语言和文本化编程语言.图形化编程语言包括:梯形图(LD-Ladder Diagram).功能块图(FBD - Function Blo ...
- Python编程语言简介
一.编程与编程语言 1. 编程的目的 计算机的发明,是为了用机器取代/解放人力,而编程的目的则是将人类的思想流程按照某种能够被计算机识别的表达方式传递给计算机,从而达到让计算机能够像人脑/电脑一样自动 ...
- day4.编程语言简介
一.编程语言 编程语言则是程序员与计算机沟通的介质. 编程的目的就是:让机器(比如计算机)按照人们事先为其编写好的程序自发地去工作. 二.编程语言分类 编程语言总体分以为机器语言.汇编语言.高级语言. ...
- scala编程_Scala编程语言简介
scala编程 Scala is a programming language that integrates the object oriented and functional language ...
- Swift编程语言简介
这是一门开源的编程语言,用于开发面向对象的编程.它有两个主要的特性:易于使用,可编程,运行时安全.Swift是一个高度集成的平台,具有很好的可移植性,而这又是基于它支持的代码规范,因此有很多非常好的应 ...
- python入门之python编程语言(简介)
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一.编程语言是什么? 1.1编程语言: 1.2编程语言可分为: 二.Python 介绍 1.1 Python 是什么 ...
- 多种计算机编程语言简介
注: 本文为转载文章,如有侵权,请联络本人删除. 链接:https://www.sohu.com/a/139587085_286966 查看全文 http://www.taodudu.cc/news/ ...
- Leo 编程语言简介
尊敬的用户您好: 欢迎来到Aleo中文社区,该系列Aleo中文社区将为您带来Aleo博客文章汉译版本. 如需转载或引用翻译请标明出处. -------------------- 译文如下: 发表时 ...
最新文章
- 实例讲解决策树分类器
- NanoPi NEO Air使用七:获取并编译U-boot和Linux的源码
- 你以为它挂了么?并没有!Apache Struts 2.5.22 GA 发布
- 各种梯度下降 bgd sgd mbgd adam
- Spring Cloud 服务安全连接
- OpenCV中Mat总结
- 10大反直觉的数学结论
- MySQL————表维护相关低频操作总结
- opencv图像分析与处理(9)- 选择性滤波
- [sql面试经验] 经典sql面试题及答案第3期
- 武士2复仇 Unity游戏工程+源码
- 耗时162天,从华为外包5k转岗正式员工15k,经历的心酸只有自己知道
- Google离去,百度就能制衡?
- Docker Compose搭建TDengine集群
- layui单据打印_layui打印表格自定义函数
- 理财等额本息和等额本金计算公式
- 微信小程序:校验真实姓名和身份证号
- 肇庆学院计算机科学与技术专业多少分能进,2020肇庆学院录取分数线是多少-各专业分数线...
- 4G DTU的特点及应用方法
- Qt linguist的操作流程
热门文章
- Pyqt5 画K线图 最漂亮的K线图 股票
- 我的京东面试之旅,考试与面试撞期我该如何抉择?
- 梦幻诛仙mysql_梦幻诛仙最最最完善架设教程,完美傻瓜教程,独家整理
- CDGA|企业数字化转型进展得越快就越好吗?
- 刷了大半年Java面试题:终于拿到众多大厂offer,分享还愿
- 为什么虚数不能比较大小呢?
- python爬取文章保存为txt_爬取博主所有文章并保存到本地(.txt版)--python3.6
- ios Could not load the image referenced from a nib in the bundle with identif
- UE4-(蓝图)第二十五课音频的播放
- colspan和rowspan