Joe Armstrong:关于Erlang,有不少东西我想改变

非商业转载请注明做译者、出处,并保留本文的原始连接:http://www.ituring.com.cn/article/114954程序员

Joe Armstrong,Erlang最初的设计者和实现者,他也是Erlang OTP系统项目的首席架构师。他拥有瑞典皇家理工学院博士学位,是容错系统开发领域的世界级专家。Armstrong起初是一名物理工做者,在攻读物理学博士学位时由于用完积蓄而转向了计算机科学,找到一份研究员的工做,为英国人工智能领域奠定人之一的Donald Michie工做。在此期间,他成为英国机器人学会的创始成员并撰写了一些有关机器人视觉的论文。人工智能的资金来源枯竭,Armstrong又回到了物理学领域。开始时他在欧洲非相干散射科学协会工做,后来又到了瑞典空间研究中心,最后加入了爱立信计算机科学实验室,Erlang就是在那里发明的。编程

图片描述

在现代语言的版图中,Erlang有点另类。同不少流行的语言相比,它既老又新。早在1986年,也就是Perl出现的前一年,Armstrong就已经开始了Erlang的工做,当时它只做为商用产品出售而且主要在爱立信公司内部使用。这种状况直到1998年Erlang做为开源项目发布后才发生变化,那时Java和Ruby已经问世3年了。当时Erlang设计初衷也至关明确,它针对的软件是相似于电话交换机那样的高可用性、高可靠性系统。微信

英文版访谈

世界上有上百种编程语言,有一些语言效率很高,也很简洁,可是它们从未真正流行起来。您认为一个语言背后的成功的关键是什么?架构

一个新的语言必须极其擅长解决某一类问题。这类问题必须是人们想要解决的问题,而与其竞争的语言在解决这个问题的时候捉襟见肘。在商业成功上,必须有人可以经过使用这个语言挣到大钱。经过使用这种语言会带给你使用其余语言没法比拟的竞争优点。并发

有哪些相当重要的因素让Erlang成为现在的Erlang?编程语言

Erlang的第一个机会来自于一个用其余语言编程的大项目的失败。咱们经过用Erlang从新编程而拯救了这个项目。分布式

第二个重要因素是1998年,Erlang被爱立信公司暂时禁用。因而当Erlang开源的时候引起了一系列的事件,一大批公司今后选择Erlang做为他们的主要技术。性能

最近的一次,WhatsApp被Facebook以190亿美圆收购,这次收购成为有史以来最大的软件收购。WhatsApp就是用Erlang编写的,这个事实也吸引了不少注意力。大数据

您对Elixir的评价很高,您认为Erlang在将来的发展会受到Elixir的影响吗?人工智能

是的,可是不仅仅是Elixir,Erlang也会被其余语言的发展所影响。

将来Erlang将会如何演进?有什么要点能够和咱们分享吗?

Erlang刚开发出来的时候,那时机器内存还只有几兆字节,因此咱们决定仅仅容许同一个模块的两个版本同时存在。如今咱们已经有千兆字节的内存,因此咱们能够有上千个版本,而后让垃圾收集器把没用的版本移除。

在原始的Erlang实现里,同一台机器上的进程间的信息经过时间是恒定的。在多核计算机上,这点将改变,因此咱们须要考虑在多核处理器上的物理位置排布。

在不远的未来,咱们将会看到每一个芯片上有几千个CPU的多核计算机的大量出现,其中的一些核会因为生产问题而没法使用,因此咱们须要学会如何把Erlang进程分布在可用的核上。

咱们还须要理解能量使用。从环境因素考虑,咱们须要知道如何把性能最大化,同时让能耗最小化。大量多核能够在低压下运行,时钟频率能够用来让能耗最小化,可是咱们仍须要很大的努力才能知道如何用编程来实现这些。

你认为Erlang和Scala之间存在竞争关系吗?他们各自独特的优点在哪?

他们确实是对手——可是Scala和JVM之间绑定地更紧密。Scala为Java程序员提供了一条迁移路径,可是Scala和Erlang运行时的特色彻底不一样。有不少Erlang擅长而Scala不擅长的问题,反之亦然。

并发、并行、分布式的编程模式,Erlang更擅长哪个?不擅长哪个?为何?

Erlang最擅长协调并行活动,处理故障,Erlang程序在运行多核的时候也能够很好地扩展。

Erlang在存储密集型的数值计算上并不擅长。这背后的缘由在于容错系统和存储管理系统。为了实现高容错,咱们必须在不一样的地方存放数据拷贝,因此当进程崩溃的时候咱们能够在其余的地方重启。全部这些复制都须要时间。高效的数值计算能够在内存中进行,不须要复制,可是它的代价就在于容错性低。

高容错性须要CPU时间和存储,因此若是你不须要容错和分布,那就不该该使用Erlang。

若是能够从新来过,你但愿对Erlang作哪些改动?

有不少东西。可是这个语言也在缓慢地改变。我但愿能看到几样东西。其中每样都是头等重要。可是好比说模块,它就不是头等重要的,咱们不能垂手可得地把模块变成一系列的功能,或者把一系列功能变成一个模块。咱们应当能够构建或解构任何Erlang对象。像协议这样的东西,虽然是隐式的,可是它们应该变成显式的。

Erlang分布式编程的编程模型须要扩展成“全球范围分布”。虽然如今咱们能够在单独Erlang节点或节点集群上注册进程,可是离开了就不行,这样就没法让世界上的每台计算机均可以访问。

XML语言彷佛没法适应现在的大数据环境。新语言ML9应该具有什么样的特性才能保持XML的优点同时去除它的缺点?

ML9是一个实验,我如今已经再也不维护了。XML能够用,可是不该被用来长期存储或传送大量数据。对于小结构文件,XML足以胜任。

有不少Ruby, Java, Python程序员想要学Erlang,对他们你有什么建议吗?

看个人书!

你曾经提到过Dave Thomas给过你不少关于写做的建议,你从你的写做经历里学到了什么?对其余初出茅庐的做者你有什么样的建议?

我学会了享受写做,经过不断地修改和重写来提升个人文字。我还找了一群不一样背景的读者来读个人文字,而后他们会告诉我他们是否理解了。我很喜欢大量的反馈,若是人们不理解我写的东西,那我就要再多解释一些。没有反馈的话,我不会知道哪一个部分更容易理解,哪一个部分更艰涩。

曾经有不少年,我认为写做是件很是困难的事,在学校的时候个人数学很好,写做很糟,可是我努力克服了本身的缺点,Dave
Thomas也给了我不少很好的建议,因此如今这件事对我来讲再也不困难了。

做为一位做者,最难的莫过于把本身置身于读者的位置上,而读者对你所了解的知识一无所知,因此你要想象他们即将遇到的问题,而后赶在他们遇到以前,把这些问题解决掉。


更多精彩,加入图灵访谈微信!

图片描述

相关文章
相关标签/搜索