您所在的位置:开发 > 语言&工具 > Erlang面向分布与并发的编程语言(1)

Erlang面向分布与并发的编程语言(1)

2009-04-22 09:20 成立涛 Javaeye 字号:T | T
一键收藏,随时查看,分享好友!

Erlang是一种面向并发,面向消息的函数式编程语言。本文将向您介绍Erlang语言的在并发和分布方面的强大特性,并简单介绍Erlang的学习过程和一些开源项目。

AD:

面对一个新的事务,我们本性都会充满好奇,可是作为程序员,很多时候对于新的语言我都充满了抵触:这个新东西值得学习么?它会不会让我抛弃我的旧爱?它文档丰富么?其是不是很难理解?它的前景如何?...等等,相信大家跟我有一样的苦恼。

但是,请听我说!我们是程序员,我们走在技术革新的最前沿。用户的产品,体验是通过我们来产生!我们不能畏缩不前,我们的固步自封,就是我们的公司,乃至整个我们的行业的停滞不前!口号可能有些响亮,但是认真思考,我相信朋友们一定有所感悟。

Erlang是什么

Erlang是什么是我们最先要面对的问题,只有清楚了它是什么,我们才能做出我们的决定。可见这个问题的重要性,它决定了很多读者是否会继续看下去!非常紧张。

Erlang最初是爱立信为开发电信相关产品而产生。

Erlang是一种面向并发(Concurrency Oriented),面向消息(Message Oriented)的函数式(Functional)编程语言。

面向并发说明Erlang支持大规模的并发应用,我们可以在应用中处理成千上万的并发,而不相互影响。面向消息,其实是为并发服务!我们应该都熟悉多线程,熟悉加锁解锁操作,熟悉可能出现的资源竞赛与死锁。在Erlang的世界里,我们可以将轻轻的抹去这些令人苦恼的词汇。Erlang的世界,每个处理都是独立的个体,他们之间的交互仅仅靠消息!因此不会有死锁,不会有痛苦的编程经历。

Erlang中一个非常重要的名词:Process,也就是我们前面提到的“个体”。它不是我们操作系统中的进程,也不是线程。它是Erlang提供给我们的超级轻量的进程。为了适应大规模并发的特性,Process需要能够快速创建,快速销毁。Process之间通信的唯一方法就是消息,我们只要知道一个Process的名字即pid,就可以向其发送消息。Process也可以在任何时候,接收消息。我们这样做只有一个目的:让我们的系统更加简单,用一种朴素的做法,实现一个高效的语言。

Erlang是种函数式编程语言,对此我没有很深刻的理解,最明显的特征就是,Erlang中到处都是函数,函数构成了我们的产品的主体,把这些函数放到一个个的Process中去,让他们运行起来,那么就组成了我们朝气蓬勃的产品。

Erlang支持对数据的位操作,拥有丰富的数据持久化机制。

同时需要说明的是Erlang内建垃圾回收机制(GC)。

Erlang语言特性

简单小巧

Erlang中只有8种基本的数据类型:Integer、float、atom、reference、fun、port、pid、bitstring

同时提供2种复合结构:tuple,list,这就是Erlang的所有数据类型。

模式匹配

在Erlang的函数中,某些语法中,我们可以使用Pattern匹配,这是一个非常好的特性,我们可以让代码自己去决定如何执行 :

比如,我们定义一个函数,其告诉我们某种水果的价格:

price(apple) -> 2.0;

price(banana) -> 1.2.

我们随后调用 price(Fruit),会根据Fruit变量的内容返回具体的价格。这样做的好处就是节省了我们的代码量,我们不用if...else…或者switch…case的来伺候了。也便于代码的扩展:加一个新的水果品种,我们只需要加一行就可以了。

学习Erlang一个非常重要的内容就是模式匹配,但是请不要混淆,这个匹配和正则表达式没有任何干系。

变量单次赋值

这个是一个匪夷所思的特性,变量竟然只能单次赋值!是的Erlang中变量一旦绑定某个数值以后,就不能再次绑定,这样做的好处是便于调试出错。当发生错误时,某个变量是什么就永远是什么,不用顺藤摸瓜的查找谁修改过它,省了好多事情。唯一的麻烦就是需要一个信的变量时,你必须再为它想一个名字。

丰富的libs

◆Erlang中提供丰富的libs

◆stdlib中包含大量的数据结构如lists,array,dict,gb_sets,gb_trees,ets,dets等

◆mnesia提供一个分布式的数据库系统

◆inets提供ftp client,http client/server,tftp client/server

◆crypto 提供加密解密相关函数,基于openssl相关实现

◆ssl 实现加密socket通信,基于openssl实现

◆ssh 实现ssh协议

◆xmerl 实现XML相关解析

◆snmp 实现SNMP协议(Simple Network Management Protocol)

◆observer 用来分析与追踪分布式应用

◆odbc 使Erlang可以连接基于SQL的数据库

◆orber 实现CORBA对象请求代理服务

◆os_mon 提供对操作系统的监控功能

◆dialyzer提供一个静态的代码或程序分析工具

◆edoc 依据源文件生成文档

◆gs 可以为我们提供某些GUI的功能(基于Tcl/Tk)


还有一些开源的lib,比如eunit,用来进行单元测试。

灵活多样的错误处理

Erlang最初为电信产品的开发,这样的目的,决定了其对错误处理的严格要求。Erlang中提供一般语言所提供的exception,catch,try…catch等语法,同时Erlang支持Link和Monitor两种机制,我们可以将Process连接起来,让他们组成一个整体,某个Process出错,或推出时,其他Process都具有得知其推出的能力。而Monitor顾名思义,可以用来监控某个Process,判断其是否退出或出错。所有的这些Erlang都提供内在支持,我们快速的开发坚固的产品,不在是奢望。

代码热替换

你的产品想不间断的更新么?Erlang可以满足你这个需求,Erlang会在运行时自动将旧的模块进行替换。一切都静悄悄。

内容导航
 第 1 页:Erlang是什么?  第 2 页:Erlang学习过程



分享到:

热点职位

更多>>

热点专题

更多>>

读书

敏捷Acegi、CAS:构建安全的Java系统
本书是关于Acegi、CAS的权威教程,是Java/Java EE安全性开发者的必备参考书。无论是Java EE安全性编程模型的背景和基础知识,还

51CTO旗下网站

领先的IT技术网站 51CTO 领先的中文存储媒体 WatchStor 中国首个CIO网站 CIOage 中国首家数字医疗网站 HC3i