欢迎来到鸟的天堂:)
erlang的简介和优点
[ 2010/04/08 01:13 | by birdsky ]
Erlang是一门被设计用于编写并发、实时、分布式系统的新语言。
很多年来,并发实时系统的编程技术一直落后于串行应用的编程。当使用C或Pascal进行串行编程已经成为
实践标准时,大多数实时系统的程序员还在倒腾着汇编。如今的实时系统可以使用Ada、Modula2、Occam等为并发编程提供了显式支持的语言来编写,或是仍旧使用C这样缺乏并发结构的语言。
我们对并发的兴趣源自于对一些展现出大规模并发的问题的研究。这是实时控制系统的一个典型属性。Erlang程序员可以显式指定哪些活动需要由并发进程来展现。这种观念与Occam、CSP、Concurrent
Pascal等语言类似,但与那些并不为了对现实世界的并发进行建模而引入并发的语言不同,这些语言引入
并发的目的只是为了将编译出可在并行处理器上运行的程序以获得更高的性能。
现今Prolog和ML等语言已经被大范围用于工业应用之中,并极大地降低了设计、实现和维护应用的成本。
我们对Erlang的设计和实现也是为了将并发实时系统编程提高到一个相似的高度。
申明式语法
Erlang具备申明式的语法,且大部分都无副作用。
并发
Erlang具备一个使用消息传递的基于进程的并发模型。Erlang的并发机制是轻量级的,如进程只占用极少的内存,进程的创建、删除以及消息传递也都只涉及极少量的计算。
实时
Erlang可用于对相应延迟在毫秒数量级的软实时系统进行编程。
持续运作
Erlang具备替换运行时系统代码的原语,并允许新旧版本的代码同时执行。这在电话交换机、空中交通控制等“不停机”系统中有极大的用处,这些系统在软件变更时都不能停机。
健壮
在上述系统中,安全性是一个关键需求。Erlang具备三种结构来检测运行时错误。这些可用于编写健壮的系统。
内存管理
Erlang是一门具备实时垃圾回收机制的符号计算语言。内存在需要时自动分配,在不需要时自动回收。典型的内存管理相关的编程错误都不再存在。
分布式
Erlang没有内存共享。所有进程间交互都通过异步消息传递完成。使用Erlang可以轻易地构建分布式系统。为单处理器编写的应用不花什么力气就可以移植到处理器网络上运行。
集成
Erlang可以简单地调用其他语言编写的程序。通过Erlang的接口系统,这些程序对于程序员来看就好像是用Erlang编写的一样。
我们从申明式语言和并发语言中借鉴了大量思想。早期Erlang的语法多半归功于STRAND,尽管当前的语
法让人觉得像是无类型的ML。其并发模型则与SDL类似。
我们的目标是为健壮的大规模并发工业应用编程提供一种精炼、简单和高效的语言。因此,出于效率原因,我们放弃了许多现代函数式语言中的特性。Currying、高阶函数、延迟求值、ZF comprehension、逻辑变量、deep guards等,增强了申明式编程语言的表达能力,但对于工业控制应用而言,没有这些特性也不会有什么显著影响。倒是模式匹配语法的使用和Erlang变量的“单次赋值”属性,使得我们能够编写清晰、短小且可靠的程序。
最初Erlang是边实现边设计的,第一个版本是一个使用Prolog编写的解释器。与此同时,我们非常幸运地
拥有了第一批热情的用户群,他们当时正在开发一个新电话交换机的原型。
这便催生了一条极为有效的语言设计途径。不被使用的构件被抛弃,对于令我们的用户不得不编写令人费
解的代码的问题,则引入新的语言构件予以解决。尽管我们经常会对语言进行一些不向下兼容的更改,我们的用户还是飞速地编写了成千上万行的代码,并积极地鼓动其他人来使用这门语言。他们的努力催生了一种新的电话交换机编程方法,相关的一些内容被发表在[??]和[??]。
第一版基于Prolog的Erlang解释器很早以前就被编译型的实现所替代了。其中的一个实现可以免费获取,
并使用非商业许可证。当前的Erlang实现在兼顾速度和轻量级并发的同时满足了我们的实时性要求。Erlang实现已经被移植到多种操作系统及多种处理器上。
Erlang适用于对很大范围内的并发应用进行编程。不少工具被开发出来用于辅助Erlang编程,如X Window
System的接口、ASN.1编译器(使用Erlang编写并生成Erlang代码)、分析程序生成器、调试器……
很多年来,并发实时系统的编程技术一直落后于串行应用的编程。当使用C或Pascal进行串行编程已经成为
实践标准时,大多数实时系统的程序员还在倒腾着汇编。如今的实时系统可以使用Ada、Modula2、Occam等为并发编程提供了显式支持的语言来编写,或是仍旧使用C这样缺乏并发结构的语言。
我们对并发的兴趣源自于对一些展现出大规模并发的问题的研究。这是实时控制系统的一个典型属性。Erlang程序员可以显式指定哪些活动需要由并发进程来展现。这种观念与Occam、CSP、Concurrent
Pascal等语言类似,但与那些并不为了对现实世界的并发进行建模而引入并发的语言不同,这些语言引入
并发的目的只是为了将编译出可在并行处理器上运行的程序以获得更高的性能。
现今Prolog和ML等语言已经被大范围用于工业应用之中,并极大地降低了设计、实现和维护应用的成本。
我们对Erlang的设计和实现也是为了将并发实时系统编程提高到一个相似的高度。
申明式语法
Erlang具备申明式的语法,且大部分都无副作用。
并发
Erlang具备一个使用消息传递的基于进程的并发模型。Erlang的并发机制是轻量级的,如进程只占用极少的内存,进程的创建、删除以及消息传递也都只涉及极少量的计算。
实时
Erlang可用于对相应延迟在毫秒数量级的软实时系统进行编程。
持续运作
Erlang具备替换运行时系统代码的原语,并允许新旧版本的代码同时执行。这在电话交换机、空中交通控制等“不停机”系统中有极大的用处,这些系统在软件变更时都不能停机。
健壮
在上述系统中,安全性是一个关键需求。Erlang具备三种结构来检测运行时错误。这些可用于编写健壮的系统。
内存管理
Erlang是一门具备实时垃圾回收机制的符号计算语言。内存在需要时自动分配,在不需要时自动回收。典型的内存管理相关的编程错误都不再存在。
分布式
Erlang没有内存共享。所有进程间交互都通过异步消息传递完成。使用Erlang可以轻易地构建分布式系统。为单处理器编写的应用不花什么力气就可以移植到处理器网络上运行。
集成
Erlang可以简单地调用其他语言编写的程序。通过Erlang的接口系统,这些程序对于程序员来看就好像是用Erlang编写的一样。
我们从申明式语言和并发语言中借鉴了大量思想。早期Erlang的语法多半归功于STRAND,尽管当前的语
法让人觉得像是无类型的ML。其并发模型则与SDL类似。
我们的目标是为健壮的大规模并发工业应用编程提供一种精炼、简单和高效的语言。因此,出于效率原因,我们放弃了许多现代函数式语言中的特性。Currying、高阶函数、延迟求值、ZF comprehension、逻辑变量、deep guards等,增强了申明式编程语言的表达能力,但对于工业控制应用而言,没有这些特性也不会有什么显著影响。倒是模式匹配语法的使用和Erlang变量的“单次赋值”属性,使得我们能够编写清晰、短小且可靠的程序。
最初Erlang是边实现边设计的,第一个版本是一个使用Prolog编写的解释器。与此同时,我们非常幸运地
拥有了第一批热情的用户群,他们当时正在开发一个新电话交换机的原型。
这便催生了一条极为有效的语言设计途径。不被使用的构件被抛弃,对于令我们的用户不得不编写令人费
解的代码的问题,则引入新的语言构件予以解决。尽管我们经常会对语言进行一些不向下兼容的更改,我们的用户还是飞速地编写了成千上万行的代码,并积极地鼓动其他人来使用这门语言。他们的努力催生了一种新的电话交换机编程方法,相关的一些内容被发表在[??]和[??]。
第一版基于Prolog的Erlang解释器很早以前就被编译型的实现所替代了。其中的一个实现可以免费获取,
并使用非商业许可证。当前的Erlang实现在兼顾速度和轻量级并发的同时满足了我们的实时性要求。Erlang实现已经被移植到多种操作系统及多种处理器上。
Erlang适用于对很大范围内的并发应用进行编程。不少工具被开发出来用于辅助Erlang编程,如X Window
System的接口、ASN.1编译器(使用Erlang编写并生成Erlang代码)、分析程序生成器、调试器……