快捷搜索:  as  as`  test

一名Erlang程序员的自述

作为法度榜样员,我们曾经闻听很多“业界动态”,“技巧改革”,曾经打仗很多“高手规语”,“势力巨子保举”。这些精确与否,都已成以前!

现在,让我们欢迎Erlang盛宴!

一、经历

2007年11月在koders.com搜索代码时,发明*.erl款式的源文件,感叹开拓说话的花样百出,此时,我感觉erlang是一个丑陋的小家伙,看名字就没有对它提起若干兴趣。

2008年头?年月的时刻,公司的项目开拓中,我有缘熟识了ejabberd,一个采纳Erlang开拓的开源jabber办事器。我开始为其诱人的特点所倾倒。是时刻卖力看看Erlang到底什么样了!

2008年4月,经由过程各类资料的汇集,懂得,我抉择系统的进修Erlang。

本日,经由过程4个月的卖力进修,我已经认识了Erlang,已经在应用Erlang开拓项目。作为C++++法度榜样员,我不敢妄自应用“认识”,“精晓”之类的字眼,然则对付Erlang我可以很认真任的说:Erlang很巧,很强大年夜!

二、利诱

面对一个新的事务,我们本性都邑充溢好奇,可是作为法度榜样员,很多时刻对付新的说话我们都充溢了矛盾:这个新器械值得进修么?它会不会让我扬弃旧爱?它文档富厚么?是不是很难理解?它的前景若何?······信托大年夜家跟我有一样的忧?。

然则,请听我说!我们是法度榜样员,我们走在技巧改革的最前沿。用户的产品,体验是经由过程我们来孕育发生!我们不能畏缩不前,我们的抱残守缺,便是我们的公司,甚至全部行业的故步自封!口号可能有些响亮,然则卖力思虑,我信托同伙们必然有所感悟。

三、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的说话特点

1.简单小巧

Erlang中只有8种基础的数据类型:

integer、float、atom、reference、fun、port、pid、bitstring

同时供给2种复合布局:tuple,list,这便是Erlang的所稀有据类型。

2.模式匹配

在Erlang的函数中,某些语法中,我们可以应用Pattern匹配,这是一个异常好的特点,我们可以让代码自己去抉择若何履行 :

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

price(apple) -》 2.0;

price(banana) -》 1.2.

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

进修Erlang一个异常紧张的内容便是模式匹配,然则请不要肴杂,这个匹配和正则表达式没有任何相干。

3.变量单次赋值

这个是一个匪夷所思的特点,变量竟然只能单次赋值!是的Erlang中变量一旦绑定某个数值今后,就不能再次绑定,这样做的好处是便于调试掉足(更深层次的缘故原由是Erlang为并发设计,假如变量可以改动,那么就涉及到资本的加锁解锁等问题),当发生差错时,某个变量是什么就永世是什么,不用顺藤摸瓜的查找谁改动过它,省了很多多少工作。独一的麻烦便是必要一个信的变量时,你必须再为它想一个名字。

4.富厚的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,用来进行单元测试

5.机动多样的差错处置惩罚

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

6.代码热调换

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

7.生成的散播式

Erlang生成得当散播式利用开拓,其很多的BIF(内建函数,相API)都具有散播式版本,我们可以经由过程BIF在远程机械上创建Process,可以向远程机械上的某个Process发送消息。在散播式利用的开拓中,我们可以像C、C++,JAVA等说话一样,经由过程Socket进行通讯,也可以应用Erlang内嵌的基于Cookie的散播式架构,进行开拓。当然也可以两者混杂。散播式开拓加倍方便,快速。Erlang的Process的操作,Error的处置惩罚等都对支持散播式操作。

8.超强的并发性

因为采纳其自身Process,而没有采纳操作系统的进程和线程,我们可以创建大年夜规模的并发处置惩罚,同时还简化了我们的编程繁杂度。我们可以经由过程几十行代码实现一个并发的TCP办事器,这在其他说话中都想都不敢想!

9.多核支持

Erlang让您的利用支持多个处置惩罚器,您不必要为不合的硬件系统做不合的开拓。采纳Erlang将最大年夜限度的发挥你的机械机能。

10.跨平台

犹如JAVA一样,Erlang支持跨平台(其今朝支持linux,mac,windows等19种平台),不用为代码的移植而头疼。

我们仅仅必要懂得平台的一些特点,对运行时进行优化。

11.开源

开源是我异常爱好的一个词汇,开源意味这加倍强壮,加倍公开,加倍的追求平等。开源会让Erlang更好。

五、Erlang与外界的交互

Erlang可以与其他的说话进行交互,如C、C++,Java。当然也有热情的同伙供给了与其他说话的交互,假如必要你也可以根据Erlang的数据款式,供给一个库,让Erang与您心爱的说话交互。

Erlang支持散播式开拓,您可以创建一个C Node,其犹如一个Erlang节点,条件是你遵循Erlang的规范。

当然最常用的交互照样再同一个Node上,比如我们要调用某个lib,调用一些系统供给的功能,这时刻主要有两种要领:Port和嵌入式履行。

Port是Erlang最基础的与外界交互的要领,进行交互的双方经由过程编码,解码,将信息以字撙节的要领进行通报。(详细这个通道的实现要领,根据操作系统的不合而不合,比如unix情况下,采纳PIPE实现,理论上任何支持对应Port通道实现的说话都可以与Erlang进行交互)。Erlang为了方便C和JAVA法度榜样员,供给了Erl_Interface和Jinterface。

采纳Port,您的代码在Erlang的平台之外运行,其崩溃不会影响Erlang。

嵌入式履行,经由过程Erlang平台加载,是以这是异常危险的,假如您的法度榜样崩溃,没有任何来由,Erlang也会崩溃。

六、Erlang利用处景

散播式产品,收集办事器,客户端,等各类利用情况。

Erlang也可以作为一种快速开拓说话,进行原型开拓。

七、Erlang的进修历程

1. 安装首先从Erlang官方网站,下载安装Erlang(http://www.erlang.org/download.html)

linux:获取源代码,根据阐明编译;windows:直接安装

2. 卖力涉猎《programming erlang》(中文疆土书已经问世),并赓续着手演习书中的例程。

3. 碰到问题时,不要退却,坚持下去找到办理法子

4. 对说话认识时,浏览一些好的开源项目

5. 有信心时,开始着手做一个小项目

6. 不间断的与大年夜家交流,合营前进

可能碰到的艰苦:

a) 对付语法的不适应?

坚持看下去,代码继承写下去,我信托1个月,你会爱好上Erlang的语法

b) 有些数据类型不清楚?

卖力看资料,或者扣问同伙,比如我

c) 中文资料的短缺?

Erlang中文的资料会越来越多,此外,Erlang的相关的英文资料也对照轻易理解,照样那句话,别怕麻烦

您可能还会对下面的文章感兴趣: