什么是 Erlang?

Erlang 由 Ericsson (爱立信公司)开发,用于帮助开发管理许多电信项目的软件。Erlang 的第一个版本发布于 1986 年,1998 年发布了它的第一个开放源码版本。可以从扩展的 Erlang 版本信息中了解到,Open Telecom电信 Platform (OTP) 是适用于 Erlang 的应用程序开发平台,也是交付 Erlang 开发环境的主要方法。

Erlang 提供许多在其他语言中不存在或难以管理的标准特性。Erlang 中之所以存在这些功能,是因为它最初用于电信领域。

例如,Erlang 包含一个非常简单的并发模型,允许在同一主机上相对轻松地多次执行代码块。除了并发之外,Erlang 还使用一个错误模型,允许识别和处理这些进程中的错误(甚至可以用新进程处理),因此可以非常轻松地构建容错能力很强的应用程序。最后,Erlang 包含内置的分布式处理,允许在一台计算机上运行组件的同时从另一台计算机请求它们。

总之,Erlang 为构建分布式、可伸缩和高性能的离散应用程序提供了良好的环境,我们常常使用这种应用程序支持现代网络和基于 web 的应用程序。

函数编程与其他范例

Erlang 与其他流行的语言之间的主要差异是,Erlang 基本上是一种函数编程语言。函数编程与语言是否支持函数无关,而是指程序操作和组件的工作方式。

在函数编程中,按照与数学计算相似的方式设计语言的函数和操作,语言通过函数执行操作,函数接收输入并生成结果。函数编程范例 (paradigm) 意味着对于相同的输入值,代码块会产生相同的输出值。因此,预测函数或程序的输出容易得多,更容易调试和分析。

与之相对的编程范例是命令式编程语言,比如 Perl 或 Java,这类语言依赖于在执行期间应用程序状态的改变。在命令式编程语言中,状态的改变意味着:对于相同的输入值,程序的组件可以根据程序当时的状态而产生不同的结果。

函数编程方式很容易理解,但是如果您习惯了过程式和关注状态的命令式语言,可能不太容易适应它。

获取Erlang

可以从 Erlang 网站直接获得 Erlang(参见 参考资料)。许多 Linux 发行版的存储库中也包含它。例如,要想在 Gentoo 上安装它,可以使用 $ emerge dev-lang/erlang。还可以使用 $ apt-get install erlang 在 Ubuntu 或 Debian 发行版上安装 Erlang。

对于其他 UNIX® 和 Linux 平台,可以下载源代码并手工构建它。从源代码构建 Erlang 需要 C 编译器和 make 工具(参见 参考资料)。基本步骤如下:

  1. 解压源代码:$ tar zxf otp_src_R14B01.tar.gz
  2. 切换目录:$ cd otp_src_R14B
  3. 运行配置脚本:$ ./configure
  4. 运行 make 以构建代码:$ make

还可以从 Erlang 网站获得 Windows® 安装程序(参见 参考资料)。

(eclipse使用Erlang http://blog.sina.com.cn/s/blog_67c16515010139ub.html)

把erlang的bin目录添加到path目录,然后执行erl:

C:\Users\Administrator>erl
Eshell V6.0 (abort with ^G)
1>

windows安装:

取http://www.erlang.org/download.html

我下载的是:OTP 18.1 Windows 64-bit Binary File

直接安装即可。安装后的路径设置,这步很重要!

把bin (我的是在:E:\programFiles\erl7.1\bin )添加到系统变量的Path后(右键我的电脑/属性/高级/环境变量)。

打开 cmd ,输入 erl 后回车,如果看到如下的信息,表明安装成功。

C:\Users\suming>erl
Eshell V7.1 (abort with ^G)
1>

bin目录下也有一个werl.exe 。是windows下的桌面环境,用这个功能比较多。

使用Erlang

要想了解函数编程风格的好处以及它在 Erlang 中的实现方式,最好的方法是了解 Fibonacci 函数。Fibonacci 数列是一种整数序列,可以使用以下算式计算各个 Fibonacci 值:F(n) = F(n-1) + F(n-2)

第一个值 F(0) 的结果是 0F(1) 的结果是 1。在此之后,通过把前两个值相加求出 F(n)。例如,F(2) 的计算过程见 清单 1

清单 1. F(2) 的计算过程
F(2) = F(2-1) + F(2-2)
F(2) = F(1) + F(0)
F(2) = 1 + 0
F(2) = 1

Fibonacci 数列对于许多系统(包括分析金融数据)都很重要,它还是在树结构的主干和分支上安排叶节点的基础。如果您玩过使用 3D 树的视频游戏,就会知道,这类游戏很可能使用 Fibonacci 数列来确定分支和叶的位置。

在用编程语言编写 Fibonacci 计算时,可以使用递归来实现,即函数通过调用本身从 root(F(0) 和 F(1))开始计算数字。

在 Erlang 中,可以用变量和固定的值创建函数。这样可以简化 Fibonacci 数列的计算,因为 F(0) 和 F(1) 返回的是固定的值,而不是计算出的值。

因此,基本函数有三种情况:提供的值是 01 和任何更高的值。在 Erlang 中,使用分号分隔语句,所以可以用 清单 2 所示的代码定义基本 Fibonacci 函数。

清单 2. 基本 Fibonacci 函数
fibo(0) -> 0 ;
fibo(1) -> 1 ;
fibo(N) when N > 0 -> fibo(N-1) + fibo(N-2) .

第一行定义调用 fibo(0) 的结果(-> 把定义与函数体分隔开),第二行定义调用 fibo(1) 的结果,第三行定义在提供正值 N 时执行的计算。可以这样做是因为在 Erlang 中有一个称为模式匹配的系统,后面会详细讨论这个系统。注意,最后一个语句(和 Erlang 中的所有语句)以句号结尾。实际的计算非常简单。

现在,我们来仔细查看一下 Erlang 语言的结构。

基础知识

如果您习惯了 Perl、Python 或 PHP 等语言,那么 Erlang 的结构和布局看起来可能有点儿怪,但它的某些方面会极大地简化应用程序的编写过程,让您不必为代码的许多方面操心。尤其是,Erlang 代码比其他语言少得多,某些操作、表达式和构造往往只有一行。

了解 Erlang 最简便的方法是使用 Erlang shell。安装 Erlang 之后,可以通过在命令行上执行 erl 运行 Erlang shell,参见 清单 3

清单 3. 使用 Erlang shell
$ erl
Erlang R13B04 (erts-5.7.5) [source] [rq:1] [async-threads:0] Eshell V5.7.5 (abort with ^G)
1>

可以在提示符下输入语句(语句应该以句号结尾)。shell 会执行语句。因此,输入一个简单的求和语句会返回 清单 4 所示的结果。

清单 4. 输入简单的求和语句
1> 3+4.
7

下面使用 shell 研究一些数据类型和构造。

数据类型

Erlang 支持基本数据类型(比如整数和浮点数)和更复杂的结构(比如元组和列表)。

整数和大多数整数操作与其他语言相同。可以把两个数字相加,参见 清单 5

清单 5. 将两个数字相加
1> 3+4.
7

可以使用圆括号组织算式,参见 清单 6

清单 6. 使用圆括号组织算式
2> (4+5)*9
2> .
81

原子值

原子值是静态的(即不变的)字面值。清单 9 给出一个示例。

清单 9. 原子值
8> abc.
abc
9> 'Quoted literal'.
'Quoted literal'

原子值的使用方式应该与 C 中的 #define 相同,也就是说,作为一种明确指定或标识值的方法。因此,对于原子值,惟一合法的操作是比较。还可以将原子值的这种使用方法扩展到布尔逻辑,利用原子值 true 和 false 来标识语句的布尔结果。原子值必须以小写字母开头,否则需要加上单引号。

例如,可以比较整数并获得布尔原子值结果,参见 清单 10

清单 10. 比较整数以获得布尔原子值
10> 1 == 1.
true

还可以比较原子值,参见 清单 11

清单 11. 比较原子值
11> abc == def.
false

原子值本身按字母表次序排序(即 z 的值大于 a),参见 清单 12

清单 12. 原子值按字母表次序排序
13> a < z.
true

可以使用标准的布尔操作符,比如 andorxor 和 not。还可以使用 is_boolean() 函数检查提供的值是 true 还是 false。

更多:http://www.ibm.com/developerworks/cn/opensource/os-erlang1/

Erlang安装简介的更多相关文章

  1. RabittMQ安装和Erlang安装教程

    安装Erlang 官方安装地址文档: http://www.rabbitmq.com/install-rpm.html 根据官网的推荐 进入到专为RabbitMQ整理的极简版Erlang https: ...

  2. webmin安装简介

    webmin安装简介 Webmin是目前功能最强大的基于Web的Unix系统管理工具.管理员通过浏览器访问Webmin的各种管理功能并完成相应的管理动作.目前Webmin支持绝大多数的Unix系统,这 ...

  3. Ubuntu16.04下,erlang安装和rabbitmq安装步骤

    文章来源: Ubuntu16.04下,erlang安装和rabbitmq安装步骤 准备工作,先下载erlang和rabbitmq的安装包,注意他们的版本,版本不对可能会导致rabbitmq无法启动,这 ...

  4. rabbitmq-server启动不了,安装erlang,安装rabbitmq-server

    sudo rabbitmq-server start,虽然现实success,但是查看状态,sudo rabbitmq-server status发现居然没有启动,报错是不是端口占用(查看日志/var ...

  5. Erlang安装笔记

    今天,为了安装RabbitMQ,需要安装Erlang,中间遇到了一些坑,记录下来. 1. 下载Erlang安装包 http://www.erlang.org/downloads http://erla ...

  6. Linux安装简介

    一.基本简介 Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和UNIX的多用户.多任务.支持多线程和多CPU的操作系统. Linux能运行主要的UNIX工具软件.应用程序 ...

  7. Redis 安装简介

    Redis 是一个高性能的key-value数据库. redis的出现,很大程度补偿了memcached这类key/value存储的不足,在部 分场合可以对关系数据库起到很好的补充作用.它提供了Jav ...

  8. erlang 安装

    [root@Aliyun software]# rpm -Uvh erlang-solutions-1.0.1.noarch.rpm [root@Aliyun software]# yum -y in ...

  9. erlang安装

    在linux安装erlang只能下载源码安装包来安装,可以到erlang官方网站上下载

随机推荐

  1. 【原】个人对win7开机黑屏只有鼠标排障总结

    个人对win7开机黑屏只有鼠标排障总结 文:铁乐猫 第一种情况是explorer.exe进程丢失或损坏有关: 判断方法是按Ctrl+Alt+Del键能呼出任务管理器,结束explorer.exe进程, ...

  2. http协议通信原理的问答

    1.dns怎么解析?答:假设一个网站www.tianyik.com的ip是192.168.31.36    浏览器(URL:www.tianyik.com)-->    客户机        h ...

  3. ASP.NET操作DataTable

    .创建 datatable DataTable dt=new Datable();//可以给表创建一个名字,tb .给表加个列名: dt.Columns.Add("id", typ ...

  4. javascript 定时器使用

    定时器的使用场合 setInterval() 方法,按照指定的周期(以毫秒记)来调用函数或计算表达式setInterval() 方法会不停的调用函数,知道 clearInterval() 被调用或窗口 ...

  5. 基于.net 职责链来实现 插件模式

    插件式的例子 QQ电脑管家,有很多工具列表,点一下工具下载后就可以开始使用了 eclipse ,X Server 等等 插件式的好处 插件降低框架的复杂性,把扩展功能从框架中剥离出来 让第三方有机会来 ...

  6. [DEncrypt] Encrypt--加密/解密/MD5加密 (转载)

    点击下载  Encrypt.zip 这个类是关于加密,解密的操作,文件的一些高级操作1.Encrypt加密2.Encrypt解密3.Encrypt MD5加密看下面代码吧 /// <summar ...

  7. 微信Demo导入遇到的问题

    最近做支付宝和微信接入自己APP工程的功能,遇到了一些问题,跟大家分享: 这里先说Android开发微信支付接入. 首先根据官方文档进行,对比支付宝的官方文档,微信部分更显得“摘要”一些. 导入后自行 ...

  8. 【Windows】Windows中的数据类型以及命名

    一.大写标示符 Windows中的很多标识符都是以两个或者三个大写字母作为前缀的,且其后紧跟一个下划线.这些标识符都是常量数值,前缀表明该常量的一般类别.如下 前缀 常量 CS(Class Style ...

  9. 如何在swift中实现oc中的分类

    在oc中为了增强已有类的功能,我们经常使用分类.使用分类,我们可以在不破坏原有类的结构的前提下,对原有类进行模块化的扩展. 但是在swift中没有分类这种写法了.相对应的是swift中只有扩展(Ext ...

  10. Linux的cat、more、less的区别

    cat命令功能用于显示整个文件的内容单独使用没有翻页功能因此经常和more命令搭配使用,cat命令还有就是将数个文件合并成一个文件的功能. more命令功能:让画面在显示满一页时暂停,此时可按空格健继 ...