参见:http://doc.chinaunix.net/web/200811/212164.shtml

2008年11月17日,51CTO联合人民邮电出版社图灵公司邀请了《Erlang程序设计》一书的译者赵东炜老师和在Erlang开发方面有着丰富经验的成立涛老师作客51CTO聊天室,就Erlang程序设计语言和云计算方面的话题与网友进行了深入交流。

赵东炜:网名jackyz,erlang-china.org网站创始人,国内最早学习和研究Erlang的人之一,是《Ajax实战》和《Erlang程序设计》两本经典著作的主要译者。12年IT行业工作经验,是互联网行业的老兵,现为独立开发人员。对架构高负载/大并发的系统颇有研究,经验丰富。

成立涛:资深C++程序设计师,从事P2P软件、流媒体、DRM保护等相关软件产品开发多年,有非常丰富的经验。国内Erlang阵营的先驱者之一,是Erlang的忠实fans,对Erlang有较深的认识。

 

以下为聊天实录,51CTO略有整理。但考虑到视频的同步问题,没有进行次序调整和大的内容整理。请读者谅解。

 

Erlang的起源与并发特性

主持人 : 提起程序语言,人们首先想到的是JAVA、C++、C#,可能对于Erlang大家了解得比较少,请赵老师介绍一下Erlang是一门怎样语言?

赵东炜:Erlang,是瑞典语的发音,所以跟英语的发音不一样。Erlang这个语言来自爱立信,实际上是爱立信在1985年的时候已经做出来的语言,到目前已经有20多年的历史,这个语言实际上已经非常成熟。因为它一直应用于电信等领域,所以离大家的视线比较远。

在多核的硬件已经成为主流的时候,大家发现传统的主流设计语言,比如说JAVA、C++、C#会有扩展性上面的困难,所以Erlang会被大家关注起来。因为它本身从语言的设计上,他是为这种方式提供了先天的优势在里面。

主持人 : 成老师对于Erlang的开发经验比较丰富,请您介绍一下。

成立涛:它和我们接触的JAVA、C++、C#的语法不太一样,Erlang还是基本的数据类型,我们可以把它作为参数,也可以做返回值来处理。在Erlang里面有一些比较高效的语法,比如说像模式匹配,还有一些非常好的递归,我们可以写出一些非常精简而且高效的代码。

Erlang像刚才赵老师说的,是一门面向并发的语言。它的语言在语言本身和在Erlang的层级上支持高并发、浓缩性和数据的持续性存储都有丰富的库,用Erlang开发是一件非常轻松的事情,是非常高效的。

主持人 : 在我们印象中像并发这样的特性,其他的语言也都做了相应的优化和调整,比如说JAVA平台的东西,像JAVA的多线程之类的,与这些语言相比,Erlang在处理并行计算方面有哪些优势呢?

成立涛 : Erlang在设计初期的时候就是为了开发电信系统,电信系统有很强的特色,比如说并发等等。其实,Erlang有一个非常重要的概念就是进程,但是这个进程的灵感来自于操作系统的进程,每一个进程都在自己的保护区域,一个进程损坏不会影响另一个进程,它们之间是高度隔离的。Erlang创建了一种新的 法,它可以非常快地创建和销毁,它们之间仅仅通过消息来交互,它们之间也可以做高隔离,这样对并行提供了非常好的基础。这是Erlang所做的。

对于一些像JAVA和.NET、C++之类的平台,它们也是意识到当今环境下多核和并发对于原有语言有一些不足,做了一些改进措施。但是,Erlang已经非常成熟了,已经有20多年的历史了,刚才赵老师已经说过了。可以这么说,其他语言刚刚起步,而Erlang已经走得比较远了,这就是它们之间比较明显的区别。

我们不能断定以后Erlang是不是在并行领域是最优的语言,但目前至少说是最好的。

主持人 : 是目前解决并发最好的?

成立涛 : 对。

主持人 : 赵老师怎么看呢?

赵东炜 : 我觉得他刚才说的这部分,有另外的部分我可以补充一下。

像其他的语言,像JAVA、.NET它们都有措施上的调整,它们目前主要的调整是在语法当中加入了FP的特性,就是面向函数编程的特性。为什么加入这些特性呢?是因为我们提到的扩展性的问题,在我们目前主流的编程语言非常难解决。因为设计在底层的架构本身,它会有一些东西是跟我们并发相冲突的,这个问题的解决方案就是要加入函数式的编程的特性。但是像JAVA、.NET、C++这种编程语言不能像Erlang这么彻底的解决这个问题,所以我认为它们的优化和调整可能不能彻底地解决这个问题,因为这个问题是在语言的底层。所以,我认为它们并发的措施,可能会让将来的并发编程容易一点,但不能从根本上解决这个问题。

Erlang入门指引

主持人 : 成老师是怎么走进Erlang这个编程语言的?您的项目当中有很多应用到Erlang的并发特性的需求吗?

成立涛 : 我在公司的时候接触了一个Erlang服务器,我们公司在用,感觉它和一些用JAVA开发的服务器有很大的优势,所以我就采用它,开始对Erlang感兴趣,开始学习,越学习越发现以前比较难解决的问题,用Erlang都是非常容易实现的,就一步步到现在了。

主持人 : 如果有网友看过我们这期访谈,想对Erlang有一个比较深入的了解和学习,二位老师有什么好的资源或者是学习方法向他们推荐吗?

赵东炜 : 首先是这本书《Erlang程序设计》,这是Erlang的创始人自己写的。只要按照这个书不断地练习,很快就可以学会Erlang本身。另外Erlang是一个开源的语言,本身有一个很大的OTT的库,有很多的源代码,都是非常高质量的源代码,可以拿来作为借鉴。另外,网上有很多用Erlang开发的开源项目,开源项目涉及到的领域会比较多,大家作为初学者学习,这些开源项目是非常好的模仿对象。

成立涛 : 这本书是不可多得的,但是像Google等等上面都有很多的开源的项目,我们首先在理解阅读这本书的基础上,我们通过动手的开源项目不断地提高自己。

赵东炜 : 我们在中国有一个Erlang的中文社区是erlang-China.org,上面已经有1年多的历史了,有很多的Erlang的资料,是一个很不错的站点,可以拿来做参考。

Erlang学习难点——思维模式的转变

主持人 : 赵老师是这本书的译者,您觉得这本书在学习的时候有哪些难点?

赵东炜 : 因为Erlang的语言学习很特别,特别到一开始看到会觉得这个语法很怪异,很不适应。这可能是学习Erlang最大的难点,因为它实际上和我们主流的编程的方法、思路是不一样的。它主要是把一个程序拆成各个不同的任务,在并行上面跑,这其实不是很彻底的、完全新的东西,比如说我们从Google的地图里面可以看到这个思想,但这就是并发的思想。它对我们大家目前所熟悉的语言会造成冲击,这个思维模式会是一个难点,除此之外语言的语法是一个难点。

成立涛 : 我刚开始学Erlang的时候,我在想数据怎么保存,因为我一直是搞C++,一直是面向对象的编程。我在想,我怎么样构建一个数据结构,我怎么样建一个数据,我的数据装在哪里。通过这些时间的学习,我发现它是把所有的信息都放在一个进程里面,这个进程既是一个集成体,又是一个数据的保存。

主持人 : 就是刚开始用不是很上手?

成立涛 : 对。

赵东炜 : 刚开始是一个痛苦的适应阶段,这个阶段过去之后就会非常顺利。

主持人 : 如果网友想学习Erlang,他在其他的平台上(比如Java、C++)有很多丰富的经验,会不会对Erlang编程思想的接受有一定的障碍?

赵东炜 : 我认为这个会因人而异,比方说他可能接触到面向消息中间件的概念,他会很容易接受Erlang的思想。因为Erlang实际上内置有一个消息,在语言层面支持了一个消息对应,这可以认为是之前用消息中间件做的东西,他在语言内部做完了这个事情。实际上没有这样的经验,他可能会对FP刚开始难以适应,这确实是目前推广起来不是那么迅速的原因,因为它是一个非常好的技术,但是它学起来确实有一个鸿沟在这里,是一个坎儿。

成立涛 : 我刚开始学起来是很痛苦的,你把这个克服以后就会比较顺畅了。

Erlang开发进行时

主持人 : 成老师用Erlang开发过哪些项目?

成立涛 : 因为我们公司里面都不用Erlang,是自己私下里做一些小的项目,在学习的过程中对于自己也是一个总结,就写一些小代码,放在Google上和开源社区上大家交流。我用Erlang做了一个网页抓取系统,是一个机器人的小蜘蛛,是抓取网页的。写的话只需要半个月左右,代码量非常小就可以实现了。因为在Erlang本身已经提供了很多非常基础的东西,然后我们写起来非常非常方便。我们既可以像传统的基于C++的编程很容易实现,基于Erlang自身的一些分布式的系统也很容易实现。

主持人 : 赵老师有Erlang的项目吗?

赵东炜 : 我自己目前正在做一个项目,具体的内容不是很方便透露,但是这个项目给我的感觉是,它可以大致地描述一下。它是要处理类似于可扩展的计算环境,比方说我的程序,在一台机器上跑,等我需要加机器的时候,我直接加一台机器进去它就变成了两台机器在跑,我再需要可以再加,在Erlang可以变成非常简单的事情。我主要是用它做这个事情,主要是做分布式,之前要用负载分配等等,在Erlang里面做会比较简单。

成立涛 : 对,有的时候我们有很多的服务器要做一些监控的系统,Erlang本身有分布式的支持,我们可能只需要写一个报告端、接收端,这样非常简单就可以全实现了。之间的通信可以通过消息等等很多的选择,非常方便,只需要几个模块就可以搞定了。

主持人 : 我看到Erlang在开发方面有很多的优点,现在关注访谈做开发的网友很多,能不能做一个直接的比较,与JAVA相比较,Erlang在开发效率、团队合作和IDE支持方面有哪些优势?

赵东炜 : 在开发效率方面我之前看到有人在网上这么说,比如说别的语言1000行写的代码,在Erlang里面100行就搞定了。实际上,它是一个比较高阶的语言,它里面有很多其他语言处理起来比较困难的部分,它已经包装好了,不需要你自己写大量的代码做这个事情。

团队合作目前在国内还言之过早,因为在国际上的情况,我看到他们团队合作的有一些项目做得不错。Erlang相对来说是比较松散耦合的系统,其实它对于这个是有帮助。因为进程和进程之间都不同的人写的,只要这个消息保持一致就可以了,这是对于团队合作非常有益的一点。

你提到了IDE的问题,这在Erlang当中推广起来也是一个难点,因为目前IDE的方面有两个了。但是我感觉跟其他的JAVA比起来还是有一点的差距,比如说断点、单独调试是比较难做。Erlang自己有开发工具,但不是IDE的形式。它的做法比较老派,所以你不太适应这个工具,比如说像1MAX里面做的帮助工具。

成立涛 : 像我们Erlang里面的代码都是用1MAX来写,调试确实和起来的语言相比,像微软的比起来差一点。但是,如果你适应了这种方式感觉还可以,我估计以后它的IDE会越来越好。

赵东炜 : 其实关于IDE我还想多说一点。其实最近在1、2个月以前,看见网上有一个关于IDE的说法,这是一个很个人的说法,他认为IDE把程序员培养得比较懒惰,这也可以作为一个参考。其实我很长一段时间不大用IDE,也挺适应的,其实习惯就好。

Erlang并行计算

主持人 : 我们目前谈到了很多Erlang在语言特性方面的问题,我们知道Erlang最大的特点是分布式、并行计算的特性,有人说如果一门语言不能很好地处理并行计算的问题,将来很可能会失去生存的权利,二位对于这个观点怎么看?

赵东炜 : 我分成两个部分来说,第一个是现在的计算环境已经到了云计算、多核计算、分布式,已经是一个常态,如果一个语言不能很好地处理并行计算的问题,它肯定会出问题。我觉得它不能够说是一个很伟大的语言,至少是不能够担当大任。第二个部分,未来也不是很绝对的,未来这个计算的模式会继续发展,有可能会出现这样的情况,有一个很成熟的计算框架,大家仍然用之前的语言,它不去处理并行计算,它运行在这个框架之上,这个框架本身把并行计算、并发、容错解决好了,你的语言不需要关注这些问题。实际上这些问题不是你不关注,而是别人帮你处理好了。从这个角度上来说,这个语言也没有死掉。

成立涛 : 语言环境在不断地发展,任何的环境不可能永远处在一个位置上。目前学习Erlang对于我们开发和对于目前环境的理解有很大的帮助。

主持人 : 是因为它解决问题的目标很明确?

成立涛 : 对,比如说我们以后还用自己的思想、方法做,下面有很多的底层的封装,这些封装也是有人做的,我们通过Erlang可以了解下面是怎么做的,用什么方式来实现这种效果的。

赵东炜 : 这种底层的封装很可能用Erlang语言来写。像目前Erlang的DB就是用Erlang来写的,等于是它提供了一种基础设施,你上面用什么语言就用什么语言。

Erlang与云计算
 
主持人 : 现在云计算是一个热门话题,请赵老师给我们详细地介绍一下云计算,您认为云计算是一个什么东西?它有哪些优势?

赵东炜 : 我认为云计算分成两个部分来看,一个是商业的部分,商业的部分是各家有自己的理解,我认为这是比较浮的一部分,它现在看不清楚一个具体的状况。

从技术的层面来讲,云计算本身关注一个是容错,是个分布,另外一个是在多核系统上运行。它其实就关注这三个技术核心的问题。

对于云计算提到了一个伸缩性的问题,实际上云计算对于我们目前主流的工业语言在伸缩性上的问题的总爆发。目前大部分的语言写的软件,它在去掉伸缩的时候,就不会很好地解决这个问题,云计算试图提供这么一种架构,在这种架构之上,你可以比较平滑地过渡到伸缩的语言环境。

这是我对于云计算的个人理解。Erlang本身设计的目标就是刚才我们提到的这三个东西,一个是容错,一个是并发,另外一个是多核。实际上,在这三点上已经非常完美地贴到了云计算的目标,这是从技术的层面来讲。对于Erlang来说在云计算非常有优势,那么云计算实际上主要的优势就是它的成本很低。不仅是我初期投入的成本很低,我的服务是按照我的使用来付费的,不仅是我初期的费用很低,而且我系统要扩张的时候,比如说我成百倍、上千倍来扩张的时候,我投入的费用也很低。像目前的金融微机,我觉得实际上对于云计算是一种很好的机会。

主持人 : 成老师怎么看云计算?
 
成立涛 : 我觉得我们搞程序的人都是这么一种感觉,比如说在自己的公司,我们需要上某个项目的时候,我们需要购买很多的服务器,需要网管人员去运维,可能会出问题。我们希望将来云计算的方面由第三方来提供,我可以保证你的需求,你们的服务质量我们都可以满足,比如说你的带宽、容量都可以满足。这也是为了节省企业成本,充分利用资源也是主要的优势。

主持人 : 我觉得云计算在实现上应该分基础的硬件、基础设施,比如说它的并发、安全、负载,还有就是应用层。那么,Erlang主要是针对基础设施那个层面来实现的是吗?

赵东炜 : 也不完全。Erlang目前来说比较适合看到用它来做一个云出来,用它来实现一个云,可以看到有这样的例子。但是,从这个代码本身来讲,它要做应用的时候,Erlang本身也是很有优势的。我们刚才提到,它的代码写起来非常简洁,而且它本身自己就很适应云计算这种环境。

成立涛 : 既可以做基础的架构方面的实现的基础服务,也可以做上层的应用,两者都可以。

主持人 : 云计算现在比较热,大家一直在炒,二位老师有没有在亚马逊和Google的平台做过项目?

赵东炜 : 我自己曾经在亚马逊的EC2的平台上面做一些尝试,我现在也在做一些小东西,我觉得它离我们理想的云计算的目标有一定的距离,主要欠缺在哪里呢?你刚才提到了存储和资源的管理,但是上面还有一个应用的问题,应用本身还有一个应用框架的问题,这个部分目前是欠缺的。我觉得这个部分可能需要一段时间的竞争,慢慢浮现出一个很不错的应用框架,这个应用框架要是一个开放的,而且是兼容的。我觉得现在的云计算离这个目标很远,主要是这个方面有所欠缺。

比如说我很简单地开发一个东西,可以在这家的云上跑,也可以在那家的云上跑,这个目标很难实现,因为现在很多的都是厂家绑定的,而且各个厂家的解决思路都不一样。这是目前它发展的制约因素,我认为这个因素在很短的时间内会有所突破。

主持人 : 成老师有关于云计算的项目吗?

成立涛 : 我以前有一个Erlang所书写的框架,关于集群这方面,允许你在亚马逊的EC2上建立一些自己的节点,我们可以进行处理,那方面如果有一些了解的话,具体的项目暂时还没有用到这方面的东西。但是,我也是在自己写一些东西,可能也会在不久的将来申请使用它。

 

主持人 : 如果有一天云计算普及了,至少我们的IT环境会变成一个什么样的?请二位老师展望一下。

赵东炜 : 我不知道未来会是什么样,但是我们预先想象一下,最先被裁掉的部分是我们的大量的IT部分,因为我们现在有大量的SA来维护我们大量的服务器,这个工作可能以后不需要我们自己来做了,这个部门的人数会精简下来,我们目前看到有可能是这样子的。

主持人 : 这还是基础设施方面,讲到应用它会给我们带来什么好处?

成立涛 : 对于一般用户来说是比较透明的,对于我们开发人员来说,我们可能更加需要遵循一些标准和协议,怎么样和第三方交互、通信,我们会更加专注编写一些应用,而不是非常庞大的系统。

主持人 : 云计算给我们带来的好处还是很多。从现在来看,云计算距离我们还有多远?在实现方面云计算还有哪些问题?

成立涛 : 我感觉一个口号特别热的时候,就是快要来临的时候,所以云计算现在是刚到,还不是太成熟,在一些标准、安全、服务方面还没有做到统一。但是,我觉得这些方面应该不久的将来很快就会做出一些统一、实现,应该会比较快。

主持人 : 赵老师怎么看?

赵东炜 : 我觉得目前云计算从技术的角度来讲,它其实问题已经不多了,基本上可能就是一些市场上竞争方面的问题。我是比较乐观的,我觉得云计算离我们并不很遥远,我觉得需要解决的问题是大家的信心问题,或者是需要有一个杀手级的应用,出来以后大家都觉得云计算可以,没有问题。之前大家对于云计算的安全性有所担忧,担心数据存放在云里面会不会不安全。实际上,这是一个有点问题的问题。比如说我们现在的钱都存在银行,那么通过网上银行就能够随便地访问它,我们也没有觉得很大的不安。我觉得这个需要客户的信心慢慢培养起来,那么它就会迅速地得到普及。

主持人 : 那么在云计算的普及中,Erlang处于什么位置?会给云计算带来哪些实现上的好处?

赵东炜 : 前面我们讲到了,Erlang在设计目标上和云的设计目标是非常契合的。实际上它经过的20多年的发展已经非常成熟,刚才成立涛也讲到了,Erlang已经走了很远。对于云计算来说是Erlang是在手边就可以用的工具,而且有很多的例子可以告诉你,你对它会比较放心。你用其他的技术,可能对于未来会比较担心,或者不是很确定。

Erlang对于云计算的优势在于此,就是它很成熟,而且整个的计算模型是非常符合云计算的。它的优势目前来说,很难在短期之内有另外一个技术能够超越它。

F#与Erlang

主持人 : 我们了解微软针对云计算也推出了一个语言F#,那么与F#相比Erlang有哪些优势?大家在云计算实现技术上应该有怎样的选择?

赵东炜 : 我们也遇到过类似的问题,微软推出的F#也是一个FP,从理想状况下,如果它经过优化也可以达到Erlang目前可以达到的标准,但是这肯定是一个很复杂的过程,而且Erlang目前的状况,它的主要优势在于它从语言本身到虚拟机,以至最底层的实现,这一整套的东西都是经过优化的。这个优化的过程会很痛苦,而且会很长。从语言层面说F#和Erlang的差别不是很大,那么对于程序人员怎么选择,这个具体会比较复杂,因为具体到技术选型的时候,可能会有更多的因素搀杂进来。比如说开发人员的掌握程度,或者是企业的投资,或者是之前对于微软的路线是不是认同,这都是因素。从技术和语言本身来说,我觉得Erlang比较有竞争力。

成立涛 : 我在前几天去了微软的研究中心的网站上看了一下F#,感觉确实是比较新兴的语言,像文档等方面跟Erlang都是没法比的,在产品方面都是相距甚远,至于以后怎么样我们都不好说。还有一点,Erlang是开源跨平台,这一点它做得非常好。

Erlang开源项目

主持人 : 现在有哪些比较知名的Erlang的开源项目?

赵东炜 : 有一个CouchDB的项目,这是阿帕奇在支持,它是类似于JSON的数据库。它对于并发进行了高度的优化,是这样的一种数据库,这个领域已经非常热门,它是今年Erlang的最佳项目,得了一个EUC奖。

另外,还有一个MQ的产品,它是实现AEMPQ协议。实际上,它是一种中间件,它类似于其他任何的语言都可以跟它进行交互,它是很高效率的基于二进制的 机制的。跟我们目前看到的消息中间件比有很大的优势,在编程模型上有很大的优势。

还有一个叫做摩奇(音译)Web,它是一个工具包,它非常灵活,可以让你写出Web Server来。

再然后有其他的非开源的,有Facebook的在线聊天系统就是用Erlang来实现的。雅虎最近的BBS也重写了,也是用Erlang来做的。还有Erlang的SQL DB。

主持人 : 无论是偏底层的实现还是像Facebook的应用,Erlang在实际应用中还是很广泛。

赵东炜 : 对,我觉得它现在是处于预热的阶段,实际上在国内是属于预热,在国外已经比较热了。这本书是在2005年出的,出了这本书之后,一些重量级的新兴项目基本上每隔1、2个月就可以看到。很多人在讨论这个东西,看到关于它的博客是非常多的。

函数式语言的复苏

主持人 : 面对即将热门的语言,我们的很多网友也应该开始关注。那么,Erlang和F#同属于函数式的语言,那么从近期的TIOBE编程语言排行榜也可以看出这一点,函数式语言有一个复苏的迹象,那么二位老师能不能预测一下函数式语言的前景?
 
赵东炜 : 这可能是在云计算的背景下,大家认为主流的语言有函数式语言的复苏,因为函数式的语言如果你要并发就是多核,这是最大的障碍,我想这也是业界对于这个问题的反应。

至于说函数式的语言会不会一下子重新打破OO(面向对象语言),我觉得这个不一定,这个很难说。我觉得谈对于我们目前的思维方式是有益的补充,我觉得从大家技术储备的角度,应该是学1、2门OO的语言。就算是技术储备,也是很有价值的。

主持人 : 成老师对于这个问题怎么看?

成立涛 : 其实像F#函数编程语言比较热门肯定是有原因的,大家可能发现以前用面向对象的方法解决问题是比较困难、比较费力,效率比较低,所以F#才热门起来。

但是,对于某些方面的面向对象还是有好处的,比如说UI的编程、窗口的操作,和并行无关的东西,它们可能占主导地位。但是,对于并行相关的开发F#会越来越主流。

 

主持人 : 下面,我们来回答一些网友提问的问题。

网友 : 关于Erlang在多核编程中的性能问题,开发好Erlang的程序的极限在哪里?Erlang在多核编程中的极限在哪里?

成立涛 : Erlang对于文档的系统极限有一个限制,比如说我们可以最大开多少个线程,它里面有一个表,比如说我们可以存储多少有一个说明,根据我们机器我们可以改,有的不可以改,根据机器的限制可以参考一下里面的东西。

赵东炜 : 我觉得他说的性能的极限我理解上不是特别能抓到他的要点。但是,Erlang本身Joe Armstrong曾经自己做过一个测试,他写过一个程序,这个程序是在不断地调优的过程当中,不但地去改。Erlang里面可以改我使用几个核心,比如说我一个32核心的,我可以当做1单核心的来使,基本上是属于线性的增长,我增加1个核性能增加1倍。我是3个核的比单核的快3倍,基本上接近于这样的曲线。

成立涛 : 它的虚拟机有这样的参数,我们可以根据操作系统的定制进行调整。

赵东炜 : 我想这个网友想问的是不是2个核Erlang快2倍。当然了,如果你的程序写得很糟糕,可能2个核也会跟其他的语言写的一样,也没有什么优势。

网友 : Erlang目前最令两位老师不满意的地方是什么?

赵东炜 : 我感觉还好,有一个地方是字符串,我刚开始觉得不满意,用了以后觉得还行,没有什么很大的问题,这可能是我一个学习过程的体验。

主持人 : 它的应用场景对于字符串的要求不是很高是吗?

赵东炜 : 等于是字符串是什么样的就是什么样的处理,不会做任何的处理。

成立涛 : 因为是二进制的数据,不会做任何的处理。还有Erlang感觉不是很好的地方是它在标准库里面有很多的数据结构。

网友 : 在国内应用Erlang有没有什么好的路子,说服我们的项目主管用Erlang?

赵东炜 : 这取决于他们自己的项目,Joe Armstrong曾经发过一篇牢骚,就是Erlang通常是充当救火队员,其他的语言搞不定了,用Erlang去,找一个Erlang的神人,三下五除二把这个问题解决。我想,这可能是很多Erlang项目的发端就是这样子的。

赵东炜 : 像刚才这个网友的提问,他们的应用确实不是很迫切,CTO可能会去考虑,有1、2个并发性的问题,也许会成为他的突破口。

网友 : 为什么说Erlang是解决并行计算的最佳选择?

赵东炜 : Erlang在本身的并行问题领域里面有好几个问题,第一个是容错性,第二个是并发性,第三个才是并行,还有一个分布。实际上,这在Erlang里面是一个统一的概念,这几个概念之间是有很细微的差异,在Erlang里面是统一的。

赵东炜 : 这个程序用一个模型来解决所有这一系列的问题,这是它非常具有优势的地方。其他的语言,并行的计算可能有自己的库,有自己的模型,在每一个问题上有自己不同的解决方案,但是Erlang在这个地方得到了极大地简化,是用一个模型解决所有的问题。

成立涛 : 它和我们以前所接触的语言,在解决这个问题方面是一个截然不同的思路。这个网友的提问,我想他非常需要学习和了解一下Erlang,他应该自己就可以把这个问题解决掉了。

网友 : 看了访谈之后感觉Erlang适合底层的开发,那么对于Web开发、应用层的开发上面适不适合用Erlang呢?

赵东炜 : 实际上在Web开发上面缺少一个Erlang的ROR,实际上好的方面已经出来了,但是Erlang并没有在这个领域里面突出它的优势,而且Erlang常常用来构建交换机、大型的代理服务器、类似需要并发连接很底层的东西,确实给人这种感觉。但是,实际上这个语言并不是很局限于在底层的。

成立涛 : 有一个开源的项目,是由Erlang写的BT客户端,写得非常好。Erlang发挥最大力量的地方是在一些底层的东西,但是用它做一些常规的东西也是非常好的,写的代码非常简单、非常清晰,可读性也非常好。

网友 : Erlang是一门高并发、低吞吐的语言,这个怎么理解?低吞吐是一个什么样的标准?

赵东炜 : 我觉得这个里面有一点点误解。实际上最高吞吐量的语言肯定是C,或者是用汇编语言写一些很内核的东西,这是毫无疑问的。但是,Erlang实际上也是用C来实现的。它对于包装没有那么完美,或者是要达到大量的调优才可以跟C达到看齐的水平或者是低吞吐量的水平。高并发我们不用讲了,实际上Erlang设计的时候就是从并发的角度来讲的。

成立涛 : 其实Erlang和其他语言交互的方面也是比较完善的,比如说有一些处理我们需要用C或者是C++来做的话,我们可以用Erlang和C或者是和JAVA交互。

赵东炜 : 比如说构建一个系统的时候,Erlang非常适合全用Erlang来做,这个过程会非常迅速,因为Erlang开发起来会非常迅速。在构建完这个系统之后,可能有的地方需要调优,确实有的地方的吞吐量非常大,这个时候,比如说这是一个Erlang的性能评级,调优非常复杂,这个地方不妨用C的方式来改写。

赵东炜 : 网上在erlang-China.org上面有一个很热的帖子,就是用C语言的时候,从1万个并发连接开始,慢慢调优到100万个并发连接,其中把Erlang写的部分换成用C写的,性能节约了不少,从40K节约到了8K,这也是很好的改进方式。

成立涛 : 每个连接从40K的资源到8K,那个帖子比较好。

赵东炜 : 等于是刚开始搭建这个模型,投入生产之后发现哪部分不够好,发现之后再改进,对于其他的语言接口是一个改变。

主持人 : 很多担心语言集成上面就不是问题了?

赵东炜 : 对。

网友 : 同样是F#语言,Lisp与Erlang相比有什么不同?Lisp里面数据就是程序,函数有副作用,而F#没有副作用,那么请嘉宾说一下怎么理解函数的副作用?

成立涛 : 比如说我们平时用的C++或者是JAVA,我们会有一些对象,他们保持一些数据,我们进行某个操作可能改变了,下次执行的时候,因为内部已经变化了,它可能会产生另一种结果。而F#里面没有一些状态保存,所以我们每一个输入都会产生同样的结果,所以是没有副作用。

赵东炜 : 专门为并发高度优化了一个F#,可以这么理解。刚才提到的副作用,无副作用在F#里面是很重要的概念,这个地方其他的语言之所以有副作用,就是因为他们会去更改某个内存地址,它们通常有这种操作,它们有更改的动作,但是F#是没有更改动作的。当我改了这个东西,别的又更改了这个东西,我再回过头来做就是错的了。而F#没有这个更改。

网友 : 官方对Erlang的支持怎么样?版本更新和对于一些新技术的支持怎么样?就是对现在的流行技术的支持。

赵东炜 : 实际上我觉得Erlang目前的开发和维护团队都是爱立信自己在做,它虽然是一个开源项目,但是它的整个团队都是爱立信的人,它的公司也被爱立信自己买回去了。实际上,它的版本更新速度是非常快的,它在今年是23A,明年年初有23B,那么,从面上来说,每一个版本是属于更新不是很大,因为它已经有20多年的历史了,改进都不是很大,所以属于是引用了新的语言的版本。

我觉得它的支持相当完善,实际上,我觉得这个方面是可以放心的。另外一方面是他刚才讲到的R,我觉得可能这个问题的层次不是在同一个层次,因为R是构建在Web层次上面的,那么Erlang可能会更多地关注于并发连接等等,实际上抽象的层次不是一样的。

赵东炜 : 说到REST,实际上可以看一下QDB,这是遵循R语言的东西,跟Erlang没有太大的关系。

成立涛 : 对,实际上最近发了一个版本,像一个简单的博客,这也是一个非常新的应用。Erlang的文档是比较完备的,也是从各种工具,到库,到编程的推荐,一些高效的方法,还有一些配置都是特别丰富。

网友 : 作为一个初学者如果想学习Erlang,并且参加一些开源项目,应该怎么学Erlang?

赵东炜 : 首先,应该把这个语言学通,作为开始他可以先学习一下别人开源项目的代码这是一个很不错的开始,从中他可以获得很多的最佳实践和编程经验,通过学习别人的代码可以学习到很多的东西。

赵东炜 : 如果他时间充裕,他可以参与一些,像我们刚才提到的开源的Erlang的项目都是开放的,他可以加入这个项目。

成立涛 : 首先第一步是他应该安装一个Erlang的识别系统,无论是Windows和Linux都可以。我们一定要一边学、一边动手,这样入门会比较快。

主持人 : 我们通过这次访谈,让大家知道了Erlang是一个什么样的语言,有哪些特性。也通过Erlang的并发计算的特性,深入到了云计算。云计算现在比较热门,也有人说它是未来发展的趋势,并发计算又是实现云计算的关键技术。每个程序员将来可能都会面对并发计算,关于大型分布式系统设计的一些问题,那么最后请二位老师来告诉51CTO的网友,让他们面对这些问题的时候,选择Erlang的时候,或者是在培训过程中遇到困难的时候,应该怎么做?

赵东炜 : 我觉得他在学习一门技术或者是深入研究一门技术的时候,肯定会自动地碰到一些问题。我个人比较推荐他从问题入手,通过碰到一个问题,然后去解决这个问题,通过这个过程,让自己获得很多的经验积累,我觉得这个是非常宝贵的东西。

对于这个项目程序的初学者来说,他可以多多的参与这些项目,他自己也可以做一些新的项目,通过实践和碰到的问题、解决问题,我觉得这是一种非常好的学习方式。

成立涛 : 我们初学Erlang的时候可能有很多的疑问,比如说他们会觉得Erlang适合做什么,能不能做P2P的应用等等?我觉得这些问题别人很难给你一个准确的答复,如果你有这些问题,你就认真地了解一下,估计你很快就能得到这些答案。

对于Erlang学习过程中的困难,我感觉还是要靠自己,很多像文档、文章都是非常非常全面完备的,你一定要自己认真去看,自己去动手,然后举一反三,这样才能比较快地掌握Erlang。

主持人 : 感谢二位嘉宾今天来到51CTO嘉宾访谈室,向大家介绍了Erlang和云计算的相关技术,谢谢!

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐