[ 转]erlang-scala真锋对决

原载:老纪博客版权所有。转载时必须以链接形式注明转载自老纪博客[http://www.jifuyi.com/]。
本文链接地址:http://www.jifuyi.com/erlang-vs-scala/

 

 

erlang-scala真锋对决

今天看到一篇关于erlang和scala这两个分布式程序设计语言的文章,且对他们之间的好坏优劣做了个比较,老纪今天把它翻译出来供大家参考, 原文在这里

在我把时间浪费在可恶的社会新闻站点的活动上时,我看到越来越多关于scala的文章,我对scala开始感兴趣的主要原因有两点:1)scala是OO(面向对象)/FP(函数编程)的混杂体,我想任何把函数编程的理念引入到面向对象的世界都是很好的一件事。2)scala的actor库严重的受到erlang的影响,scala有时作为一个伟大的构建可扩展的并行应用语言而被提及到,就像erlang一样。

有几次,我看到scala和erlang的比较资料。erlang对于并行编程是非常好的,在他的应用环境中有很好的运行记录,但是他很难成为主流,他是陌生的,也没有很多库的支持。而scala这两点都很占优,他有函数编程的语义,他的Actors库提供了erlang式的并行,他运行在jvm上且能使用所有的java库,这些组合使scala在构建并行应用上成为更好的选择,特别是在java上已经有了投资的公司。

我没有用scala编过代码,但是我对他进行了一些很好的研究,看起来它是一个非常好的语言。我认识的一些最好的程序员都称赞过它。我想scala会是java的一个很好的替代品,函数对象、类型推导、混合、模式匹配都是非常好的语言特性,而这些正是java严重缺乏的。

尽管我相信scala是一个明显优于java的伟大的语言,但scala不会取代erlang成为我构建高可用、低延、大规模并行应用的语言。scala的actors库是一个大的改善,这是java在并行编程方面必须面对的。但是它没有提供所有erlang式并行的好处,而这使erlang在并行处理方面成为一个伟大的工具。我在这些方面做了大量的研究,这些是我认为一个人在scala和erlang中做出选择时而必须考虑的几个重要不同点。

 

并行编程

scala的actors库在模拟仿真erlang式的消息传递方面做了很好的工作。和erlang进程类似,scala的actors通过信箱接受发送消息,像erlang,scala在接收消息时有模式匹配语义,这会产生简洁、优雅的代码。scala的actors库走的更远,但是它没有使并行编程更简单的特性:不变性(老纪觉得scala提供了这种特性,val声明的变量都具有这种特性)。在erlang中很多进程在一虚拟机中可以共享同一数据,语言本身保证竞争条件不会发生,因为数据都是不可变的。在scala中,你可以在actors间发送指向可变对象的指针,这是造成竞争条件的典型方法。他让你停留在你开始的地方:不得不取保方位共享内存的同步

假如你很小心,你可以通过拷贝所有信息或者认为发送的信息是不变的的方法避免这个问题,但是scala不保证方位共享对象的安全性,而erlang能够在语言层面上保证(老纪认为通过正确的编程风格能够保证这一点,而scala的这种特性有时还能使程序设计更简单些,但是这样做的一个结果就是后期维护的难度会加大,所以坚持一种风格就一直坚持下去)

代码热交换

热代码交换是一个杀手级特性,它不仅消除了代码升级时的停机时间,它也使语言更具生产效率,因为它可以实现真正的交互式编程。通过热代码交换,你可以在不停止服务器、重新编译代码、重启服务器这个流程的情况下测试代码更改后的影响,而且你也能回到代码更改前的状态。热代码交换是我喜欢在erlang编程的主要原因。

在开发阶段,jvm对于热代码交换支持的很有限,我相信它只是在运行是改变了一个函数体,这个能力较erlang的热代码交换来说不是太强劲,erlang在任何时刻对改变的代码起作用

erlang热代码交换的一个最个的方面是当你调用新代码是,vm保留代码的前一版本,这就在老版本代码被最终删除之前给你一个接收消息执行代码交换的机会。这是据我所知erlang独一无二的特性。

热代码交换对于实时应用来说更重要,因为它能够在用户之间同步通讯,重启服务会导致用户session失效,这是很糟的用户体验,假设正在完魔兽,重大战役中你的连接因为开发人员想在代码中加入一条诊断记录而断开了,这是非常令人骂人的一件事。

垃圾收集

对支持垃圾收集语言的一个共同的论点是它不适合低延迟应用,因为潜在的垃圾清扫会冻结VM,现代的GC优化想分代收集可能缓解这个问题,但不完全,偶尔老代的需要收集,这回触发很长的清扫动作。

erlang被设计成能够构建具有软实时性能应用,erlang的GC也为这个目的而优化,在erlang中,进程的堆是独立的,所以GC也是对立的,这就最小化了因为垃圾收集而导致进程被冻结的时间。erlang也有ets,一个用于存储大量数据的内存存储工具,但是它不参与垃圾回收

在这,erlang可能没有一个决定性优势,JVM有一个新的并行垃圾回收机制用意最小化冻结时间,这个收集器因为更短的冻结而优化性能和内存开销,我没有找到任何关于它应用于产品的显示它多好的评测,不过,假设它是和erlang一样适合于低延迟应用。

作者:老纪
原载:老纪博客版权所有。转载时必须以链接形式注明转载自老纪博客[http://www.jifuyi.com/]。
本文链接地址:http://www.jifuyi.com/erlang-vs-scala/

 

 

Scala完全自学手册:Erlang 本文介绍了Erlang的基本概念和语法,并通过示例代码展示了如何使用Erlang进行函数式编程和并发编程。本文将介绍Erlang的基本概念和语法,并通过一些示例代码帮助您快速入门。您可以从Erlang官方网站下载并安装适用于您的操作系统的版本。它采用轻量级进程(Processes)来实现并发,每个进程都是独立运行的,具有自己的堆栈和状态。在这个示例中,我们只实现了最基本的回调函数,但您可以根据需要添加更多的函数。函数根据输入的参数匹配不同的模式,并返回相应的问候语。在Erlang中,函数是基本的代码单元。 阅读详情

相关推荐

并发需求下的Scala及Erlang语言的比较与使用

对同为函数式语言的Scala和Erlang进行了比较

多核危机:Scala vs. Erlang

近来在博客上关于Scala与Erlang之间的争论越来越热。未来注定是多核的世界,问题在于如何去解决多核的危机。Scala和Erlang是两门渴望成为其解决方案的语言,但它们也有些许的不同。那么它们所采取的方式各有什么利弊呢?\引入问题\摩尔定律已经改变了。我们不再获得和以前一样的时钟频率增长,取而代之,我们得到了更多的(CPU)核心。今天,也许你的笔记本都已经是双核的了。\为了利用多核的特性,应...

cpongo5 259

高通camera调试经验总结

修改AF对焦模式 adb shell setprop vendor.debug.camera.af.manual 2 //使能手动对焦 adb shell setprop vendor.debug.camera.af.manual 0 //使能自动对焦

weixin_43381364的博客 1万+

scala VS Erlang

1[url]http://www.infoq.com/news/2008/01/languages-in-future-systems;jsessionid=8B2FAA2DE942EFAD2DCFFC305C348C3C[/url] 2[url]http://www.infoq.com/news/2008/06/scala-vs-erlang[/url] 3、[url]http://www....

298

Cesium中GLB模型加载

Cesium中GLB模型加载全解析:Primitive与Entities方法详解

m0_72030584的博客 3471

PLUS模型土地利用变化模拟使用简介

因子包括自然因子如社会因子,通过计算整理得到新图层,并以tif文件输出到驱动因子的文件夹里,驱动因子文件夹里存放的是tif文件格式。线性回归使用提供的所有的LULC资源数据,可以选择往后预测的年数,选择好数据之后,可以得出预测的每一年的每一用地类型面积数据。在此过程之后,可以继续使用此CARS输入的数据继续模拟,也可返回二(3)中CARS模块,重新输入不同的年份预测。在此过程之后,可以继续使用此CARS输入的数据继续模拟,也可返回二(3)中CARS模块,重新输入不同的年份预测。

qq_42831270的博客 5808

scala vs erlang

今天跑了一下erlang和scala消息处理能力测试。 在我的笔记本环境 mac 10.8 8G内存 cpu:i3 2.4G   结论: 1,内存占用,akka,scala都比erlang高,jvm开1G即可(和消息本身有关,这里不作为重点参考) 2,处理能力: erlang:约30万/秒 akka:  约70万/秒 scala: 约20万/秒   可以,在type...

zb_86的专栏 305

Frida精准定位Shopee x-sap-ri动态签名生成函数

x-sap-ri是Shopee客户端生成的上下文感知型动态令牌,本质为基于设备标识、请求路径与毫秒级时间戳三元组的SHA256哈希值,经Base64编码后作为防重放与防批量伪造的核心校验字段。其生成逻辑深度混淆且跨Java/Native层,静态分析失效,而Frida凭借内存级函数调用拦截与JNI层穿透能力,成为唯一可行的技术路径。本文聚焦Frida在加固App中的实战适配——通过libcrypto.so API特征扫描反向定位被抹名的生成函数,实现对x-sap-ri输入参数(如16字节device_id加密

weixin_33978578的博客 611

为啥 Erlang 没有像 Go、Scala 语言那样崛起?

为啥 Erlang 没有像 Go、Scala 语言那样崛起?

global_coding的博客 1198

基于机器学习和深度学习的新能源功率预测研究综述--学术论文模式--个人梳理

本文是博主根据前人的研究成果总结的机器学习和深度学习等理论方法在新能源功率预测领域的相关研究内容要点,按照学术科技论文写作的模式进行的呈现,包括文章引用等也都做了详细的批注,花了很多时间和心血,一方面是对自己学习成果的一些总结,另一方面也希望对大家有用(尽量不要直接copy哦,转载请标注,如有不当请评论或私信指出哦可再生能源的间歇性给新型电力系统的运行带来了巨大挑战,准确地预测新能源出力对于电网的安全可靠运行尤为重要。

干吧滴! 6320

《AI编程实战:深度学习模型改进与系统部署》,改进专栏目录和介绍

专深度学习相关项目都写在本专栏,《一次订阅解锁全部,都有源码,永久观看》,包括车牌识别、股票预测、人脸识别、风格迁移、图像修复、图像超分辨重建、图像分割等任务,Web/PyQt系统实现。引入Transformer、Swin Transformer、DenseNet、ViT、ConvNeXt等算法实战,提供卷积改进,魔改对比实验,模型剪枝,模型蒸馏,模型量化,全网独家整合改进专栏,为不同领域的同学发表论文提供了大力支持。

在职AI算法工程师,擅长计算机视觉,YOLO目标检测、分割等,擅长web、pyqt界面可视化,好内容持续更新中,来这里跟大家一起学习,共同进步 3269

《Scala, Erlang, F#作者讨论函数式语言》有感

《Scala, Erlang, F#作者讨论函数式语言》有感 《Scala, Erlang, F#作者讨论函数式语言》有感 - passover的个人空间 - DOIT博客 - 多易网《Scala, Erlang, F#作者讨论函数式语言》有感上一篇 / 下一篇 ...

158

Unity-Mirror网络框架-从入门到精通之MultipleMatches示例

Multiple Matches 示例主要讲述了如何在使用 Mirror 网路框架时管理多个游戏匹配。以及如何设置一个能够同时支持多个游戏会话的系统,使玩家能够加入他们所选择的比赛,而不是强制他们加入一个单一的匹配。

TxNet 965

Scala和Erlang,以及多核主导的未来

2009-07-30 10:59 Niclas Nilsson Infoq 我要评论(0) 字号:T | T 这篇文章于08年发布在Infoq上,在过了一年之后,这篇文章中所谈到的东西仍然很有参考价值。如果您还没有阅读过这篇文章,那就再看一看多核时代为何能成为Scala和Erlang的天下吧。 AD: 未来注定是多核的世界,问题在于如何去

hanxinis的专栏 690

机械式激光雷达实现原理以及特性总结

本文介绍了机械式激光雷达的技术原理和核心特性。该技术通过机械旋转结构实现360°三维扫描,采用飞行时间法测距并生成点云数据。核心优势包括全向扫描、长距高精度和成熟度高,但存在体积大、成本高、可靠性受限等局限。典型应用于自动驾驶测试车、测绘建模等领域。与固态激光雷达相比,机械式在视场角和探测距离方面有优势,但在体积、成本和可靠性方面处于劣势。该技术目前主要应用于对成本不敏感的专业场景。

start_up_go的博客 262

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

scala akka 类比 erlang otp

scala akka 类比 erlang otp   有兴趣可以看看

zb_86的专栏 259

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

真低调,真聪明——Erlang大会记草原(补充三点)

一到Erlang会场,金雨就蹦过来热情地打招呼。并马上指着我前面的一位老兄说:这可是个大大的牛人,你一定要认识。牛人就是草原。 在上海Erlang讨论会上,和草原聊天,知道他的厉害,他给Erlang和Scala都写了IDE,期间他也演示给我看了看,包括他三年前做的一个开源软件AIOTrade(有3万人下载)。 席间,大家照例聊看书学编程语言的话。草原说,他学语言,从来都不是拿本书死

出版人周 筠 3491

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

多核危机:Scala vs Erlang

近来在博客上关于Scala与Erlang之间的争论越来越热。未来注定是多核的世界,问题在于如何去解决多核的危机。Scala和Erlang是两门渴望成为其解决方案的语言,但它们也有些许的不同。那么它们所采取的方式各有什么利弊呢? 引入问题 摩尔定律已经改变了。我们不再获得和以前一样的时钟频率增长,取而代之,我们得到了更多的(CPU)核心。今天,也许你的笔记本都已经是双核的了。 为了利用多核的特性,应用程序需要支持并发。如果你的客户买了一台八核的机器,要向他们解释清楚正常情况下应用程序只会用到12%的CPU能力

huangwj20042008的专栏 698

java scala vs erlang c

说来惭愧,自己一向不成才,语言研究过很多,可是,到现在也没有一个像样的作品。 每想到此,便感叹自己的缺点,自己的懒惰,自己的无所事事。 我的Orange系统本来是用java做的,可是,我觉得太费劲了,过于笨重了。想来想去,也许scala能改变点什么?况且,我也想看看这种语言,我到底能学到什么程度。这是我第二次学习scala了,我确实比之前懂得多了,可是,我仍旧没法减轻软件的厚度,我讨厌太多...

一阴一阳之谓道。 228

消息队列的‘语言基因‘:Erlang与Scala如何塑造RabbitMQ和Kafka的DNA

本文探讨了Erlang与Scala如何作为RabbitMQ和Kafka的'语言基因',深刻影响了两大消息队列的设计哲学与性能表现。Erlang的轻量级进程和OTP框架赋予RabbitMQ高并发处理能力,而Scala的函数式特性与JVM生态使Kafka在大数据场景中表现卓越。文章对比了两者在并发模型、错误处理等关键维度的差异,为分布式系统选型提供技术洞察。

nn3456的博客 56

scala vs erlang 消息处理 简单测试

今天跑了一下erlang和scala消息处理能力测试。 在我的笔记本环境 mac 10.8 8G内存 cpu:i3 2.4G 结论: 1,内存占用,akka,scala都比erlang高,jvm开1G即可(和消息本身有关,这里不作为重点参考) 2,处理能力: erlang:约30万/秒 akka: 约70万/秒 scala: 约20万/秒 可以,在typesaf...

weixin_30527423的博客 97
上一篇: 改善你的J2ME程序界面-使用开源UI库
下一篇: 面试官的心得笔记
csbison
博客等级 码龄23年 1粉丝 5原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值