开源Erlang真的能成为下一代Java语言吗

2016-02-19 21:37 6 1 收藏

图老师小编精心整理的开源Erlang真的能成为下一代Java语言吗希望大家喜欢,觉得好的亲们记得收藏起来哦!您的支持就是小编更新的动力~

【 tulaoshi.com - 编程语言 】

 

一、高可靠性的Erlang,有望取代Java

Erlang将成为一个非常重要的语言。它也许就是下一代的Java语言。目前Erlang发展的主要问题就在于没有一个大的公司来支持它,作为它强大的后盾。结果,Erlang被推动成为一个开源的项目。Erlang语言最大优势就是它非常适合多核,web服务的特点。事实上,Erlang是唯一成熟的,非常稳定可靠,适合开发运行在多核机器上的高伸缩性的系统。

Erlang最为并行的Prolog,始于20年前。Joe Armstrong发明了它,并成为推动它发展的主要人物。Joe Armstrong在Erickson公司工作,Erickson是一家瑞典的科技公司。最大的第一个Erlang项目是开发一个电子开关系统,此系统有几百人开发,他们写了几百万行的代码。这个系统的要求重点就是可靠性,不专门是速度,最终,这个项目具备了令人难以置信的优良可靠性。Joe声称他们取得了“9个9的可靠性”。

“9个9的可靠性”意识是什么了?意思就是说在一百万秒钟,只有一秒出现故障时间,或者说在一百万分钟,只出现一分钟的故障时间。然而,一百万秒大约就是30年。一百万分钟大约是2000年。这个系统生产出来已经有上10年了,但是我认为少于15年。该公司已经卖出来上百个该系统,或许有上千个。200个系统运行10年的话,加起来就有2000年来了,如果所有的系统加起来总的故障时间少于1分钟的话,那么他们就可以说该系统达到了“9个9的可靠性”。

“5个9的可靠性”是指一年中只有5分钟的故障时间,能达到这个水平就已经很不错了。人们非常热衷追求6个9,或者7个9。要说达到9个9是简直前所未有的。但是,Erlang开发的系统达到了这个空前的水平。

优良的可靠性还不能说明问题,并不能使得Erlang伟大。并不是有足够的人关注稳定性。“顺序的Erlang”作为一个函数型的编程语言也不是使得Erlang伟大的原因。“并行的Erlang'”作为一种面向对象的语言也不是Erlang指的推崇的原因。值得我们称道的是Erlang'是唯一一个成熟的语言,带有可靠的实现工具,和一组非常好的库,能让你的软件无缝的伸缩,从单个处理器系统到使用多个处理器系统使得你的应用程序运行的更快。

二、丰富的多处理器的支持,使Erlang如虎添翼

当使用Erlang构建一个系统的时候,你只能在进程间通过传递消息,来使得一组进程间通信。在Erlang里面没有共享的状态,唯一的方式就是通过发送消息和进程通信。不像Java 或者 Smalltalk,只是在并发操作的时候,写一些线程/进程,Erlang程序员使用进程来模块化,提高可靠性,重用性。以后它们就能自发的并行运行。理论上说,你可以在一个处理器上构建你的系统,但是实际中没有这样的Erlang程序员这么做。他们更喜欢当作有上千个处理器来开发系统。当在一个处理上运行的时候并不影响性能。但是最好利用多处理器,来提高系统的性能。接着,把应用程序放在10个处理器的系统上,你的应用程序就会运行快了十倍(或许八九倍,但是还是不错的)。

当然,因为你写你的应用程序时候,写了上千个的进程并不能说有伸缩性。像任何一个系统一样,你也有瓶颈的。在等待另外一个进程的时候,你要浪费很多的等待时间,希望得到其它进程提供的结果。为了实现Erlang系统的伸缩性,有许多的设计模式供你选择。

Erlang自带了很多程序库。大多数的程序库是为了构建应用程序,或者使用不同种类的网络服务。Erlang有web服务和数据库的功能。Erlang社区将Erlang定位为构建可靠性web服务和web服务应用程序的语言。但是自带的程序库名字大多称为OTP,即开源电信平台。毫不奇怪名字为什么这么起,虽然它与电信没有任何关系。但是Erlang构建运行几十年,在需要每天更新软件,或者周期更换硬件而不中断的开发框架和平台。这正是电信应用程序所需要的,同时是在线银行,在线商店等等所需要的。

Joe Armstrong已经完成了一本关于Erlang的书,已经由Pragmatic Programmers.出版了。Joe还写了一篇关于这本书的文章。这是一本非常好的书,任何对Erlang有兴趣的人应该去读一读。对于这本书,令我很发疯的是它展现的更多的是Erlang最为函数式的语言,而没有很多的关于面向对象的方面。事实上,它否认Erlang是面向对象的。

三、另类的设计,将会带给Erlang程序员更多的思想圣宴

Erlang里面的进程就是一个对象。最初我在讲述面向对象的设计的课程上,我从三个角度解释面向对象编程。从表面的角度说,一个面向对象的系统就是它的开发者要认识到程序设计是一个模拟。从更深的角度来说,面向对象的系统就是它有对象构成,通过对象之间的发送消息来通信,通过对象间传来传去的消息来完成计算。从软件工程的角度看面向对象的系统就是它支持数据抽象化,通过函数调用后期绑定,和继承完成多态。

Erlang是行为驱动模型的完美例子,也是从更新的角度来看的例子。进程当然支持数据抽象多多态。一个Erlang进程就是一个函数,它从消息队列中读取消息,找到自己相匹配的消息,接着做出响应。这种函数式结构处理方法很像Smalltalk中的类。更有甚者,好几个线程共同遵照一个协议,有一些共同的东西,很容易分析出他们有一些相同的函数可以调用。这就很像类的继承性了。因此,你可以说Erlang支持继承的,虽然它和Java 和Smalltalk有很大的区别。我能想象的出很多的Erlang开发者认为程序设计就是模型化。因此,Erlang适合所有的具有面向对象特征的系统,虽然说顺序的Erlang是函数式的语言,不是一种面向对象的语言。

Erlang唯一和面向对象的语言不同的是它强调失败故障。任何消息的发送可能失败。进程不能引发异常,它们出现失败故障。系统构造出工作进程,在底层有可能出现失败故障,而在它们上面有管理进程,能够重启失败的进程,因为开发者能够预期到失败的进程。

Joe讲述了Erlang太多的函数式语言特性,他认为Erlang缺乏易变的状态,也就是暗示没有加锁。但是,它的确是缺乏SHARED状态。你可以用Basic, perl, 或者C写进程。我能肯定许多的人会学习Erlang,然后说:“我能把Erlang的优秀特点引入到我们的语言中去”。但是依照我的观点,Erlang的并发程序设计的特点,为并行和可靠性而设计的成熟的实现方法和强大的程序库是它的特别之处。

相信任何一个其它的语言能追上Erlang。其它的语言也许会增加一些和Erlang相似的语言特点。但是需要它们花很长的时间取构建如此一个高质量的虚拟机和为并发和可靠性开发的程序库。因此,我认为Erlang将会取得成功,并在10年内成为现在Java语言的替代者。如果你想在将来的构建多核的应用程序,你应该学习Erlang。

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/bianchengyuyan/)

来源:https://www.tulaoshi.com/n/20160219/1626671.html

延伸阅读
标签: 孕前
出生季节真能影响BB聪明度? 某调查将400名6月龄的宝宝进行对比,发现冬天出生的宝宝,比夏季出生的宝宝运动能力强,智力上也略胜一筹。 不过,家长们不必太过纠结,这种对比仅限于6月龄宝宝,以后的发展如何尚未进行跟踪。这个阶段宝宝的运动能力和智力等,与家长的养育有很大关系。 冬宝宝和夏宝宝...
老人青光眼是怎么引起的 你好,老人是青光眼的高发人群,其直接原因主要是由于眼压增高而引起视盘(曾称视乳头)凹陷、视野缺损,严重的青光眼甚至会导致患者失明。由于青光眼危害大,且在特点人群在发病率较高,加之导致青光眼的因素很多,所以青光眼的高发人群应积极治疗青光眼的预防工作。另外,及时进行眼科疾病对及早发现疾病,进而趁...
每年出生问题孩子百万名 “目前我国每年大约有20万名到30万名新生儿为出生病残儿,再加上一些出生后数月或数年才能发现的缺陷或疾病,我国每年约出生100万名存在不同健康问题的孩子。” 中国人口学会生殖保健分会常务副会长梁济民教授在日前召开的“中瑞女性生殖健康论坛”上指出, 影响出生人口素质的原因很复杂:“除25%是遗传因素外,15%是...
标签: 怀孕
生儿育女,是人生的一件大事。每对新婚夫妇都期望在新的家庭中,增添一个健康聪明的宝宝。当您准备怀孕和生育的时候,从优生优育方面来说,须注意这样三件事: 停服避孕药后不宜立即怀孕新婚后有些夫妇特别注意选择最佳受孕时机。在此期间,有的女方喜欢服些避孕药品,但应该知道的是,当您停服避孕药准备生育时,不宜立即怀孕。因为,不论长...
头痛经验分享 图钉问: 自己经常会头痛,也找不到什么具体原因,这种病症会不会遗传给我的下一代啊? 图老师答: 头痛是否遗传不能一概而论,从头痛的病因来看,如果是感染、中毒、外伤、肿瘤等引起的头痛,显然跟遗传无关。而脑血管病,像是高血压、脑出血、脑血栓等导致的头痛或者偏头痛都有一定的遗传倾向。偏头痛的流行病学调...

经验教程

466

收藏

11
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部