公司里有项目要用到Erlang,关于Erlang的介绍,这里先简单交代一下
Erlang是一个丹麦的数学家,他搞出来的一个概率分布Erlan分布,并且用这个分布开创一们学科排队理论,电信上经常用这个分布来测算话务量,因此在电信界比较有名.当年Joe Amstrong把他的语言命名为Erlang也是为了纪念这个为电信领域作出过卓越贡献的人.
Erlang是Ericsson和Ellemtel Computer ScientceLaboratories为解决电信领域中的并发和分布式问题,设计的语言;从理论应用于实践的角度讲,主要探索的是函数式语言能否应用到通信领域的大型交换机上,从Erlang的实践效果来看,答案是肯定的。
Erlang的优点:
(1) Code Loading Primitives允许在系统运行过程中升级代码。
(2) Erlang的轻量级进程可以支持极高的并发性,而且在高并发的情况下内存使用相当的少。Erlang的并发性并不会受到宿主操作系统并发性的限制。Erlang的原子操
作是一个压栈级别的,而C语言是指令级别的。
(3)最开始Erlang的设计目标就是实现分布式环境,一个Erlang的虚拟机就是一个Erlang网络上的节点。一个Erlang节点可以在另一个-Erlang节点上创建自己的并发进程,而子进程所在的节点可能是运行其他的操作系统的服务器。不同节点的之间的可以进行极为高效而又精确的通信,就像它们运行-在同一个节点一样。
(4)Erlang内部建设有多种错误检测原语。我们可以通过这些原语来架设高容错性的系统。例如,一个进程可以监视其他进程的状态和活动,即使那些被监 -控的进程处于其他节点。在分布式状态下,我们可以把系统配置成具有Fail-over功能的分布式系统。当有其他节点出错的时候,系统会把他的运行场景自动快速-的切换备份节点上。
(5) Erlang是一个"软"实时系统(Soft Real Time),它可以提供毫秒级别的响应。
变量
所有的变量都必须以大写字母开头。
X = 12832.
如果再执行 X=1244.则报错了。
注意:在Erlang中,X不是一个变量,至少不是你在Java或C中的那种变量。
另外,=不是赋值操作符。而模式匹配,变量只能被赋值一次。当我们第一次输入X=12832时,Erlang会问自己,"要怎么做才能让这样语句的值变是true?"(注:erlang的每一个语句都会有值),由于X没有被赋值,因此可以把12832绑定到X上。同时也使得语句有效。
浮点数
1> 5/3.
1.66667
2> 4/2.
2.00000
3> 5 div 3.
1
"/"永远返回浮点数。
原子
用来表示不同的非数字常量值。类似于java/c中的枚举类型。原子是一串以小写字母开头、后跟数字、字母或下划线(_)或邮件符号(@)的字符。而且原子是全局有效的,而且无需使用宏定义或者包含文件。
比如,red、december、a_login_name
使用单引号引起来的字符也是原子,一个原子的值就是原子自身。比如,'a'就等同于a
元组
将一定数量的项目组成单一的实体,那么就可以使用元组(tuple)。将若干个以逗号分割的值用一对花括号括起来,就形成了一个元组。如{ supercode, 1.75}.这个元组就包括了一个原子和一个浮点数。 元组类似于C语言中的结构。
2> F = {firstName, joe}.
{firstName,joe}
3> L = {lastName, armstrong}.
{lastName,armstrong}
4> P = {person, F, L}.
{person,{firstName,joe},{lastName,armstrong}}
从元组中提取字段值
1> Point = {point, 10, 45}.
{point, 10, 45}.
2> {point, X, Y} = Point.
{point,10,45}
3> X.
10
4> Y.
45
注意
{my,X,Y}=Point, 将出错,因为my与point不匹配,如果{Mypoint,X,Y}=Point. 那么是正确的.
列表
列表用来存储数目可变的东西,如在商店里买到的商品。将若干个以逗号分割的值用一对方括号括起来,就形成了一个列表。
1> ThingsToBuy = [{apples,10},{pears,6},{milk,3}].
[{apples,10},{pears,6},{milk,3}]
列表之中的各个元素可以有各自不同的类型。
2> [1+7,hello,2-2,{cost, apple, 30-20},3].
[8,hello,0,{cost,apple,10},3]
列表的第一个元素称为列表的头(head),除去头,剩下的东西称为列表的尾。注意,列表的头可以是任意东西,但列表的尾通常还是一个列表。
3> ThingsToBuy1 = [{oranges,4},{newspaper,1}|ThingsToBuy].
[{oranges,4},{newspaper,1},{apples,10},{pears,6},{milk,3}]
4> [Buy1|ThingsToBuy2] = ThingsToBuy1.
[{oranges,4},{newspaper,1},{apples,10},{pears,6},{milk,3}]
绑定结果如下
Buy1 7→ {oranges,4}
字符串
严格地讲,Erlang中并没有字符串,字符串实际上也就是一个整数列表。
1> Name = "Hello".
"Hello"
可以用$符号来表示字符中整数值。
5> I = $s.
115
6> [I-32,$u,$r,$p,$r,$i,$s,$e].
"Surprise"