时间:2016-11-21来源:本站原创作者:佚名
Erlang是什么

Erlang是一门函数式编程语言。如果你曾经用过命令式语言,那么像i++这样的语句对你来说再普通不过了,但是在函数式编程中,却不能这样使用。事实上,改变任何变量的值都是绝对不允许的。乍一听这似乎很奇怪,但是想想上过的数学课,你学到的内容是这样的:

y=2x=y+3x=2+3x=5

如果我把以下内容加进去,你一定会觉得困惑。

x=5+1x=x∴5=6

函数式编程认识到了这一点。如果我说x是5,从逻辑上,我就不能说它也等于6!这属于欺诈。这也是为什么每次用同样的参数去调用函数时,它都应该返回相同的值:

x=add_two_to(3)=5∴x=5

对于同样的参数,函数永远要返回同样的值,这个概念称为引用透明性(referentialtransparency)。正是因为这一点,才能够把add_two_to(3)替换成5,因为3+2的结果就是5。这意味着,为了解决更为复杂的问题,我们可以将很多函数粘合在一起,还能保证不破坏任何逻辑。既合乎逻辑,又整洁,不是吗?不过还有一个问题:

x=today()=/10/22--等待一天后--x=today()=/10/23x=x∴/10/22=/10/23

哦不!我美丽的等式!它们突然间全部出错了!为什么我的函数每天返回的值都不同呢?

显然,在某些情况下,不遵循引用透明性是有用的。Erlang在函数式编程方面采用了一种非常注重实效的策略:遵守最纯粹的函数式编程原则(引用透明性、避免可变数据等),但是在遇到现实问题时,就打破这些原则。

Erlang是一门函数式编程语言,它同时也非常重视并发和高可靠性。为了让几十个任务能同时执行,Erlang采用了actor模型,每个actor都是虚拟机中的一个独立进程。简而言之,如果你是Erlang世界中的一个actor,你将会是一个孤独的人,独自坐在一个没有窗户的黑屋子里,在你的邮箱旁等待着消息。当你收到一条消息时,会用特定的方式来响应这条消息:收到账单就要进行支付;收到生日卡,就回一封感谢信;对于不理解的消息,就完全忽略。

可以把Erlang的actor模型想象成这样一个世界,其中每个人都独自坐在屋子里,可以执行一些不同的任务。人和人之间只能通过写信进行交流,就是这样。这样的生活虽然听起来很乏味(但却是邮政服务的新时代),但这意味着,你可以要求很多人为你分担不同的任务,他们做错了事或者犯了错误绝对不会对其他人的工作造成任何影响。除了你之外,他们甚至不知道还有其他人的存在(这真是太棒了)。

事实上,在Erlang中,只能创建出相互之间完全没有共享、只能通过消息通信的actor(进程)。每次消息交互都是显式的、可追踪的和安全的。

Erlang不仅仅是一门语言,同时也是一个完整的开发环境。代码被编译成字节码,字节码运行在虚拟机中。所以,Erlang很像Java,也像患有多动症的孩子,在任何地方都能运行。下面是Erlang标准发布中的一些组件:

开发工具(编译器,调试器,性能分析器以及测试框架和可选的类型分析器);

开放电信平台(OTP)框架;

Web服务器;

高级跟踪工具;

Mnesia数据库(一个键/值存储系统,能够在多台服务器上复制数据,支持嵌套事务,并且可以存储任何类型的Erlang数据)。

Erlang虚拟机和库还能让用户在不中断任何程序的情况下升级运行系统的代码,能轻易地将代码分布在多台计算机上,还能用一种简单但强大的方式去管理错误和故障。

在本书中,我们会对其中绝大部分工具的使用方法进行介绍,也会讲解如何实现安全的系统。

谈到安全性,你应该知道Erlang中与之相关的一个总方针——任其崩溃(letitcrash),这说的可不是一架崩溃后会导致大量乘客死亡的飞机,它指的更像是在下方铺有安全网络的钢丝上的行走者。尽管应该避免犯错,但是也不用时刻去检查每一种可能的错误情况。

Erlang提供了从错误中恢复的能力,用actor来组织代码的能力,以及用分布式和并发进行伸缩的能力,这些听起来都棒极了……

使用Erlang语言,可以在仿真器(emulator)中对绝大多数代码进行测试。在代码脚本被编译和部署后,不仅可以在仿真器中运行它们,还可以现场对它们进行修改。

下面我们会介绍Erlangshell的使用方式以及Erlang的基础知识。

1 使用Erlangshell

要在Linux或者MacOSX系统上启动Erlangshell,首先需要打开一个终端,输入erl。如果之前已经正确安装了Erlang,就会看到如下显示:

$erlErlangR15B(erts-5.9)[source][64-bit][smp:4:4][async-threads:0][hipe][kernel-poll:false]EshellV5.9(abortwith^G)

祝贺,你成功运行了Erlangshell!

如果你是Windows用户,那么可以在命令行提示符中执行erl.exe启动Erlangshell,但是一般建议使用werl.exe,它存在于开始菜单中(选择AllPrograms→Erlang)。werl是一个专门用于Windows系统的Erlangshell,它有自己的窗口,窗口具有滚动条,还支持一些行编辑快捷键(Windows系统中的标准cmd.exeshell不支持这些快捷键)。然而,如果想重定向标准输入或者输出,又或者想使用管道,那么就只能使用erl.exe来启动shell。

现在,我们可以在shell中输入代码,并在仿真器中运行它们。但是,我们先要熟悉一下Erlangshell。

1.1 输入shell命令

Erlangshell中内置了一个基于Emacs的功能子集构建的行编辑器,Emacs是一款流行的文本编辑器,从20世纪70年代使用至今。如果你熟悉Emacs,那就再好不过了。即便你对Emacs一无所知,也无妨。

首先,在Erlangshell中输入一些文本,然后,按下Ctrl+A(^A)。光标会移至该行的开头。同样地,按下Ctrl+E(^E),光标会移至该行的末尾。你还可以使用左右箭头键让光标前后移动,用上下箭头键在之前写好的代码行之间来回切换。

我们来试一些其他输入。输入li,然后按下Tab键。shell会自动把刚才输入的li自动补全为lists:。再次按下Tab键,shell中会列举出lists模块下所有可用的函数信息。你可能会觉得这种表示法比较奇怪,不过放心,很快你就会熟悉了(第2章会对模块进行更多的介绍)。

1.2 退出shell

至此,Elangshell的大部分基本功能特性都已经介绍过了,除了一件非常重要的事情:我们还不知道如何退出shell呢!还好,有一种快速的寻求帮助的方法:在shell中输入help().并按下Enter键。你会看到一系列命令的相关信息,包括进程查看函数、shell工作方式控制函数等。其中大部分的命令都会在本书中用到,不过现在,我们最感兴趣的是下面这行描述:

q()--quit-shorthandforinit:stop()

嗯,这是退出shell的一种方法(实际上,一共有两种)。但是,当shell被冻结住时,是无法输入这条命令的!

如果刚才启动shell时,你留意观察过,可能会看到一句“abortingwith^G.”字样的注解。那就按下Ctrl+G,然后再输入h寻求帮助。

Userswitch







































白癜风治疗的医院
白癜风治疗

转载请注明原文网址:http://www.gzdatangtv.com/bcyykf/1676.html

------分隔线----------------------------