`
foreversunyao
  • 浏览: 212345 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论
阅读更多

转载:http://jbpm.group.iteye.com/group/topic/7938

作者:成立涛 (litaocheng@gmail.com )

作为程序员,我们曾经闻听很多“业界动态”,“技术革新”,曾经接触很多“高手箴言”,“权威推荐”。这些正确与否,都已成过去!

现在,让我们迎接 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的相关的英文资料也比较容易理解,还是那句话,别怕麻烦

八、 Erlang开源项目

排名不分先后

  • couchdb     基于文档等非结构化数据的数据库,提供HTTP接口
  • disco       Map-Reduce 框架,Erlang + Python
  • ejabberd    性能出众,使用广泛的Jabber开源服务器
  • mochiweb    轻便,高效的HTTP应用框架
  • rabbitmq    中间服务器,实现AMQP协议
  • yaws        高效的web server
  • etorrent    Bittorrent 客户端
  • scalaris      分布式的key-value存储

九、遇到问题

参看 Erlang官方文档 http://www.erlang.org/doc/

订阅 Erlang maillist http://www.erlang.org/mailman/listinfo/erlang-questions ),进行提问

 Nabble提供的 Erlang maillist存档中搜索( http://www.nabble.com/Erlang-f14095.html 

Google中搜索答案

十、推荐阅读

Erlang Design Principles  http://www.erlang.org/doc/design_principles/part_frame.html 

Erlang Efficiency Guide  http://www.erlang.org/doc/efficiency_guide/part_frame.html 

Erlang Programming Rules  http://www.erlang.se/doc/programming_rules.shtml 

十一、推荐网站

http://www.erlang.org

http://erlang-china.org

http://trapexit.org (国内封锁,可以使用 http://trapexit.org.nyud.net:8080/ 或其他代理登录)

http://toquick.com

http://blog.socklabs.com/

http://www.planeterlang.org/

分享到:
评论

相关推荐

    erlang文档介绍

    erlang介绍介绍opt开发方法中文资料

    Erlang环境

    1. Erlang介绍: Erlang是由瑞典电信公司Ericsson开发的一种编程语言,主要用于构建实时、分布式、容错、并发系统。它的设计灵感来源于Prolog,但同时具备现代编程语言的特性,如垃圾回收和动态类型。Erlang的进程...

    erlang编程 Introducing Erlang

    Simon St. Laurent的《Introducing Erlang》这本书深入浅出地介绍了这些概念,是学习Erlang的理想起点。通过阅读这本书,读者将能够理解Erlang如何处理并发、分布式计算和故障恢复,从而构建高效、健壮的软件系统。

    erlang资源

    2. **函数式编程概念**:Erlang是纯函数式语言,书中可能会介绍函数式编程的基本理念,如不可变数据、函数作为一等公民等。 3. **过程和模块**:Erlang的组织方式,包括如何定义和调用函数,以及模块的使用。 4. *...

    Erlang常用工具介绍

    对Erlang的一些常用的开发或调试工具进行了介绍

    两本erlang电子书

    第一部分介绍Erlang语言的基础知识,包括其语法特性、并发模型和错误处理策略。读者将了解Erlang的模式匹配、函数式编程概念以及如何利用轻量级进程进行并发编程。第二部分深入探讨OTP,讲解其设计原则和组件,如...

    erlang programming

    编程+Erlang.pdf可能会详细介绍Erlang的基础语法、数据类型、过程和模块等概念。 2. **并发编程**:Erlang的并发模型是其独特之处。它通过轻量级进程(Lightweight Processes, LWP)实现并发,进程间通信(Inter-...

    Erlang_CNode用户指

    3. **Erlang数据类型和API**:介绍CNode API,包括如何在C中表示和操作Erlang的数据类型(如整数、原子、列表等),以及如何调用Erlang函数和处理返回结果。 4. **进程通信**:阐述如何在CNode中创建Erlang进程,...

    erlang深度分析.pdf

    工具介绍 Erlang社区提供了多种工具帮助开发和调试,例如调试器erts_debug和observer用于监控运行时性能。hotreplace模块允许代码热替换,不必重启节点即可更新模块。 #### 5. Erlang的分布式应用 Erlang的分布式...

    Erlang系统介绍

    erlang 开发技术介绍,适合初学者,对erlang有个概要了解

    erlang趣学指南

    这本书的作者Fred Hébert是一位在一线拥有丰富实战经验的工程师,他通过轻松幽默的文风和清晰的讲解,向读者介绍了Erlang的模块、函数、类型、递归、错误处理、数据结构、并行编程、多处理、事件处理以及Erlang的...

    Erlang User Reference Manual

    - **介绍**:这部分介绍了如何从源代码构建和安装Erlang/OTP版本18。理论上可以在任何Unix/Linux系统上,包括OS X上构建。 - **下载源码**:可以从Erlang官方网站或GitHub上获取源代码。 - **官方网站**:...

    Erlang程序设计(第2版)1

    【Erlang程序设计(第2版)】是由Erlang之父Joe Armstrong撰写的一本经典著作,专注于介绍Erlang编程语言在并发、分布式和容错系统中的应用。本书适用于初学者和有一定经验的Erlang程序员。作者在书中讨论了如何利用...

    centos6下离线安装erlang所需要的所有rpm包

    本文将详细介绍如何在CentOS 6环境下离线安装Erlang的全过程。 首先,你需要从可靠源下载Erlang的RPM包。这些包通常包括了运行Erlang所需的各个组件,例如`erts`(Erlang Run-Time System)、`kernel`、`stdlib`等...

    Programming Erlang.pdf

    综上所述,《Programming Erlang》是一本深入介绍Erlang编程语言及其应用的书籍。它不仅涵盖了Erlang的基本语法和概念,还探讨了如何利用该语言的独特特性来解决实际问题,特别是在高并发场景下的应用。对于希望了解...

    Erlang游戏程序学习完整PDF手册

    这份"Erlang游戏程序学习完整PDF手册"是一份全面介绍Erlang在游戏开发中应用的学习资料,包含了Erlang的基础知识、并发原理以及在游戏开发中的实践案例。 Erlang语言的设计理念源自于Ericsson公司为解决电信系统中...

    rustler编写erlang nif

    【描述】:在CSDN博主ap114的文章中,详细介绍了如何使用Rustler来创建Erlang的NIF。文章首先讲解了Erlang NIF的基本概念和用途,指出NIFs可以在Erlang VM中提供接近原生速度的性能,但同时也需要注意它们可能带来的...

    Erlang Programming 导读.pdf

    ### Erlang Programming 导读.pdf 知识点详解 #### 一、Erlang简介与特点 **Erlang**是一种通用的、并发性强的、容错性高的编程...通过上述介绍,希望能够帮助读者更好地理解和掌握 Erlang 的基本概念和技术特点。

    erlang_mysql编译好了

    本文将详细介绍如何在Erlang环境中编译并使用MySQL接口,以便在Erlang程序中访问MySQL数据库。 首先,我们需要一个Erlang MySQL客户端库。这里提到的“erlang_mysql编译好了”可能是指已经成功编译了这样的库,它...

Global site tag (gtag.js) - Google Analytics