评:erlang(起个中文名:易浪),在穿戴设备技术,云技术,大数据,游戏服务器等等高并发分布式必然大有用处,这个语言必火!~传统语言除了java和c,其他的必然会死去,今后一定会出现新的类erlang语言,必热!                                                                                               ------------深圳-linux内核-罗(2014-06-26)

Erlang不能错过的盛宴
(快步进入Erlang的世界)
作者:成立涛 (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/

转载于:https://www.cnblogs.com/kool/p/6696111.html

Erlang(起个中文名:易浪)不能错过的盛宴相关推荐

  1. 一位Erlang程序员的自白

    Erlang不能错过的盛宴 (快步进入Erlang的世界) 作者:成立涛 (litaocheng@gmail.com) 作为程序员,我们曾经闻听很多"业界动态","技术革 ...

  2. 一位Erlang程序猿的自白

    Erlang不能错过的盛宴 (快步进入Erlang的世界) 作者:成立涛 (litaocheng@gmail.com) 作为程序猿,我们以前闻听非常多"业界动态","技术 ...

  3. 一位Erlang程序员的告白

    Erlang不能错过的盛宴 (快步进入 Erlang的世界) 作者:成立涛 (litaocheng@gmail.com ) 作为程序员,我们曾经闻听很多"业界动态","技 ...

  4. 易语言编程系统(奋斗的小鸟)_PDF 电子书

    中文名: 易语言编程系统 作者: 佚名 图书分类: 软件 资源格式: PDF 版本: 扫描版 出版社: 西安地图出版社 书号: 7806707743 发行时间: 2005年3月 地区: 大陆 语言: ...

  5. 一乐 :煎饼果子与架构模式

    编者按:本文由一乐在高可用架构群分享,转载请注明来自高可用架构「 ArchNotes 」. 一乐是我,也是梁宇鹏.现任环信首席架构师兼 IM 技术总监,负责即时通讯云平台的整体研发和管理.曾任新浪微博 ...

  6. 什么是redis,用redis进行秒杀项目

    文章目录 什么是NoSql 演变过程 NoSql的特点 什么是Redis Redis能干嘛 http://www.redis.cn 中文网 Redis入门 安装 性能测试 基础知识 五大基本数据类型 ...

  7. RabbitMQ入门-环境搭建

    为何用消息队列? 用于业务解耦.分布式事务最终一致性.广播.错峰流控等等. RabbitMQ 是一个由 Erlang 语言开发的 AMQP 的开源实现. 参考资料: 消息队列之 RabbitMQ:ht ...

  8. Easy Scheduler 1.0.2 发布,分布式工作流任务调度系统

    Easy Scheduler Release 1.0.2 Easy Scheduler 1.0.2是1.x系列中的第三个版本.此版本增加了调度开放接口.worker分组(指定任务运行的机器组).任务流 ...

  9. 分布式工作流任务调度系统Easy Scheduler正式开源

    分布式工作流任务调度系统Easy Scheduler正式开源 1.背景 在多位技术小伙伴的努力下,经过近2年的研发迭代.内部业务剥离及重构,也经历一批种子用户试用一段时间后,EasyScheduler ...

最新文章

  1. js 多维数组长度_C++申请与释放动态数组1(学习笔记:第6章 16)
  2. 交叉科学不仅不是边缘学科,反而应是科研主流
  3. 七天学习计划_c#_[1]泛型类(还有六天,明天继续写!)
  4. 拦截器获取请求参数post_「SpringBoot WEB 系列」RestTemplate 之自定义请求头
  5. Spring Cloud Alibaba源码 - 16 Nacos 注册中心源码解析
  6. Makefile中怎么使用Shell if判断
  7. 【OS学习笔记】三十九 保护模式十:中断和异常的处理与抢占式多任务对应的汇编代码----动态加载的用户程序/任务一代码
  8. jquery手写轮播图_jquery 实现轮播图详解及实例代码_jquery_脚本之家
  9. 贾跃亭的惩罚来了!就这??
  10. Android 学习--ListView 的使用(一)
  11. 娱乐篇第十期:互联网的事情you意思(十)
  12. SQL server 2005下载地址
  13. stmt php,PHP mysqli_stmt_free_result() 函数用法及示例
  14. ad18常用快捷键可以修改吗_AD18快捷键
  15. 5.13 利用图层的矢量蒙版打造浪漫情调 [原创Ps教程]
  16. Win11更改系统文件夹的默认保存位置方法分享
  17. python入门学习_PythonTip
  18. linux uefi转mbr方法,如何将uefi改成mbr分区
  19. 像科学家一样思考python列表_像计算机科学家一样思考python-第3章 函数
  20. 如何解释准确率、精确率与召回率?

热门文章

  1. 应用下载店用户喜好分析
  2. OpenCV-Python中的两种图像通道分离法
  3. python开发环境wingide的安装与破解
  4. 图像模拟添加(产生)高斯噪声的OpenCV代码
  5. 图像旋转的MATLAB和OpenCV源码
  6. leetcode算法题--Decode String
  7. 线程间怎么交换数据_2 万字长文详解 10 大多线程面试题|原力计划
  8. TTCN-3 编码解码相关模块引入2
  9. Java 比较相等 == or .equal()?
  10. OJ题目-使用+-|等符号表示数字,进行运算【C语言】