Erlang 简介

Erlang是一种功能编程语言,也具有运行时环境。它的构建方式使其对并发,分发和容错功能具有集成支持。Erlang最初是为在爱立信的多个大型电信系统中使用而开发的。

Erlang的第一个版本是由Joe Armstrong,Robert Virding和Mike Williams于1986年开发的。它最初是爱立信内部的专有语言。它随后于1998年作为一种开放源语言发布。Erlang以及OTP(Erlang中的中间件和库的集合)现在由爱立信的OTP产品部门提供支持和维护,并被广泛称为Erlang/OTP

为什么选择Erlang?

如果您具有以下要求,则应使用Erlang开发应用程序-

  • 该应用程序需要处理大量并发活动。

  • 它应该可以很容易地在计算机网络上分发。

  • 应该有一种使应用程序对软件和硬件错误都容错的工具。

  • 该应用程序应该是可伸缩的。这意味着它应该能够跨越多个服务器,而几乎没有变化。

  • 它应该易于升级和重新配置,而不必停止和重新启动应用程序本身。

  • 该应用程序应在一定严格的时间范围内对用户做出响应。

Erlang的官方网站为https://www.erlang.org/

Erlang官方网站

简介

Erlang是一种通用的面向并发的编程语言,它由瑞典电信设备制造商爱立信所辖的CS-Lab开发,目的是创造一种可以应对大规模并发活动的编程语言和运行环境。Erlang问世于1987年,经过十年的发展,于1998年发布开源版本。Erlang是运行于虚拟机的解释性语言,但是现在也包含有乌普萨拉大学高性能Erlang计划(HiPE)开发的本地代码编译器,自R11B-4版本开始,Erlang也开始支持脚本式解释器。在编程范型上,Erlang属于多重范型编程语言,涵盖函数式、并发式及分布式。顺序执行的Erlang是一个及早求值,单次赋值和动态类型的函数式编程语言。

Erlang是一个结构化,动态类型编程语言,内建并行计算支持。最初是由爱立信专门为通信应用设计的,比如控制交换机或者变换协议等,因此非常适 合于构建分布式,实时软并行计算系统。使用Erlang编写出的应用运行时通常由成千上万个轻量级进程组成,并通过消息传递相互通讯。进程间上下文切换对于Erlang来说仅仅 只是一两个环节,比起C程序的线程切换要高效得多得多了。

使用Erlang来编写分布式应用要简单的多,因为它的分布式机制是透明的:对于程序来说并不知道自己是在分布式运行。Erlang运行时环境是一个虚拟机,有点像Java虚拟机,这样代码一经编译,同样可以随处运行。它的运行时系统甚至允许代码在不被中断 的情况下更新。另外如果需要更高效的话,字节代码也可以编译成本地代码运行。

发展历史

Erlang得名于丹麦数学家及统计学家Agner Krarup Erlang,同时Erlang还可以表示Ericsson Language。

Erlang并非一门新语言,它出现于1987年,只是当时对并发、分布式需求还没有今天这么普遍,当时可谓英雄无用武之地。Erlang语言创始人Joe Armstrong当年在爱立信做电话网络方面的开发,他使用Smalltalk,可惜那个时候Smalltalk太慢,不能满足电话网络的高性能要求。但Joe实在喜欢Smalltalk,于是定购了一台Tektronix Smalltalk机器。但机器要两个月时间才到,Joe在等待中百无聊赖,就开始使用Prolog,结果等Tektronix到来的时候,他已经对Prolog更感兴趣,Joe当然不满足于精通Prolog,经过一段时间的试验,Joe给Prolog加上了并发处理和错误恢复,于是Erlang就诞生了。这也是为什么Erlang的语法和Prolog有不少相似之处,比如它们的List表达都是[Head | Tail]。

1987年Erlang测试版推出,并在用户实际应用中不断完善,于1991年向用户推出第一个版本,带有了编译器和图形接口等更多功能。1992年,Erlang迎来更多用户,如RACE项目等。同期Erlang被移植到VxWorks、PC和 Macintosh等多种平台,两个使用Erlang的产品项目也开始启动。1993爱立信公司内部独立的组织开始维护和支持Erlang实现和Erlang工具。

语言特点

区别于传统的面向对象语言,它有着自己的优点:首先它是基于进程并发的,这些进程是轻量级的并且互相协作有条理的处理着事务,用户不用担心具体的PV操作,这些进程对于操作系统而言是透明的,对操作系统来说只有一个进程在运行。其次,每个进程拥有自己的独立内存,在进程间通信中完全依赖于消息传递,每个进程都拥有自己独立的邮箱并通过模式匹配的方式来查找要处理的消息,然后分别进行异步处理。这减轻了进程之间的耦合度,提高了独立性。Erlang还具有可靠的容错机制,由于进程之间相对独立,于是Erlang里可以用一些进程去链接或监视另外一些进程,当这些被监视的进程因为错误而产生异常退出的时候,负责监视的程序就会收到这些进程退出的消息并对这些进程进行相应的处理。在OTP中Erlang可以利用监控树执行一对一或者一对多的监控。最重要的是,对多核CPU的支持,在Erlang中对于多核的操作不需要开发人员来管理,对开发人员来说是完全透明的,我们只需要和往常一样编写程序就可以。最后Erlang是支持热代码升级的,在Erlang中可以实现不停机就进行代码的升级,来实现软件运行中的热升级。Erlang的版本管理中,可以保留一个模块的2种不同的版本,支持对版本的回滚。

Erlang语言专注于某方面的需求,并不是完全适合所有情况,在它有很多诱人的特性的同时也有一些缺点:它的语言的抽象能力不强,Erlang是一种弱类型语言,在匹配的时候可以较为方便的调整消息的内容或者模式的要求,但发生错误的时候,这些错误的隐蔽性较强。另外,当项目规模比较大的时候会发现由于语言的特性各部分出现扁平化的特征,程序中有非常多的元组和记录程序结构混乱。其次,函数式编程与传统语言有差别,目前主流的编程语言都是C语言系和面向对象,目前函数式编程缺乏成熟的编程理论,相关方面的人才和资料也较少这增加了学习的难度,另外面向对象的思想已经深入人心,这使得在学习函数式编程的时候思维难以转变。最重要的是,Erlang是属于IO密集型的语言,适合分布式特征明显的项目,对于计算密集型的要求,会比较吃力,但是仍然有优化提升的空间。

发展前景

Erlang近些年在国内的发展十分迅速,主要用于游戏服务器系统开发。Erlang上手容易,容错率高,快速迭代等优点非常适用于页游和手游的开发。尤其以广州,深圳等一些中,小型的游戏公司几乎都是用Erlang。以c++为基础语言的游戏服务器系统需要长时间的技术积累,并且c++的开发效率不如Erlang,高额的招人成本对新兴公司也是巨大的挑战。但中小型公司注重产品大于技术,这对Erlang在于国内的发展是不利的,大部分公司都用着同一套已经成型的Erlang框架,着重于处理具体的业务逻辑忽视了底层优化。这对于Erlang的发展是极其不利的。

Erlang在国外发展的时间较长作为一种成熟的语言已经得到了证实,目前应用于包括爱立信的宽带,GPRS和ATM交换解决方案系统等几百个重大的开发项目,有着丰富的项目经验,编程框架(OTP)为Erlang系统的提供了一套实现健壮性和容错性的工具和类库和完整的结构化框架。但相较于国内用于游戏开发,国外主要用于web服务,计算机电话,消息系统和商业银行等领域。在本世纪初Erlang.org网站总共有36000个网页左右,十年之后,这一数字上升到了280万,这说明Erlang社区不断的在扩大,包括商业,研究与开源项目,病毒营销,书籍和博客的组合,当然这些都源自于Erlang最初的设计-用于解决特定领域难题的需求和推动。