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也给了我很多很好的建议,所以现在这件事对我来说不再困难了。

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


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