原文:
Ten Questions with Joe Armstrong about Parallel Programming and Erlang
第一部分:关于并行编程的通用问题
1)
Michael:我们进入了多核时代,你认为并行计算最终会成为主流吗?或者这仅仅是一个阶段并且很快对并行编程感兴趣的人将(又一次)变成高性能社区的一员?
Joe:是的,绝对主流——我们讨论的是双核时性能提高两倍而4核时性能提高4倍。我曾经有一个在32核的机器上跑的程序,性能提高了18倍。注意这是18倍——我们习惯于通过重写部分程序代码来提高5%~10%的性能,却想不到400%或1800%——这是所有软件的通病。
2)
Michael:在网络上,一时间对共享内存编程还是消息传递编程是并行编程更好的方式展开了激烈的讨论。对此你的意见是什么?
Joe:共享内存系统很难理解并保证正确,特别是当错误出现的时候。不出错就不错了,当出错时则根本无法继续搞。当一个程序拿了一个锁,并且把共享内存搞的乱七八糟,然后崩溃了,其他进程怎么知道它到底在搞什么东东,更别说帮忙搞定那些错误了。
事务内存和纯净的消息传递系统不用考虑上述的任何问题。
3)
Michael:对你而言,并行编程在目前或者过去的几年里最令人兴奋的发展和革新是什么?
Joe:P2P架构,分布式哈希表,planet lab等全球伸缩的系统集成。
类似于bit torrent的东西正在摧毁传统工业,就像1770年多轴纺织机摧毁了家庭纺织机工业一样,bit torrent正在历史记录上做同样的事情。这不是是否发生的问题,而是何时发生的问题。
4)
Michael:并行编程的未来在哪里?“银弹”即将到来吗?
Joe:是的——纯净的消息传递基础架构将解决很多问题(例如amazon简单查询服务)。这回到了Paul Morisson的基于流的编程模型。
5)
Michael:目前最紧迫的一个问题是并行编程仍然很难,并且没有它的顺序编程对手们高产。对你而言有什么方式改变这一点吗?
Joe:这并不太难——这很难是因为目前占据统治地位的编程模型是锁、线程和共享内存——现在它们是很难的。纯净的消息传递系统对编程实现和推理很容易。
世界是并行的——我们是并行的。
第二部分:关于Erlang
6)
Michael:与其他并行编程系统相比较,Erlang有什么独特的优势和弱点?你希望在哪些方向改进它?
Joe:优势是Erlang是为容错系统而设计的,所以在软件和硬件出错时它能很好的降级。它认真对待出错。进程和错误处理是语言定义的一部分而不是操作系统所提供的。
弱点是分布式Erlang的安全性是要么全有要么全无的。拥有不同级别的安全性和能力或者基于信任的安全模型会更好。
7)
Michael:如果你可以再次从零开始设计Erlang,你会做哪些不同的事情?
Joe:
1,让模块和代码处理更高级一些,添加自省功能
2,为协议的断言属性添加一层契约
3,在编程语言里让协议成为头等公民
4,为分布式计算加一个信任/能力层
5,为弱连接的分布式系统分层。分布式Erlang只是为了拥有强大安全性的类集群计算。
8)
Michael:有没有什么特殊的工具推荐给大家来方便Erlang编程?IDE?编辑器?调试器?调优器?改错工具?或其他什么的?
Joe:没有。编译器独自拥有95%的fun。这样人们对他们的IDE十分笃信。我使用emacs和xterm。有些人热衷于一些东西,但我本人不怎么感兴趣。
9)
Michael:请给Erlang新手们分享一些小建议!你该怎么入门?有什么书?教程?网络资源?提问最好的地方在哪里?
Joe:
书籍——(无耻的插入):读我的新书Programming Erlang。
教程:www.trapexit.org
发布:www.erlang.org
提问:erlang邮件列表(登录www.erlang.org)
10)
Michael:你在Erlang程序里遇到的最糟糕的错误是什么?
Joe:没有文档的程序——我讨厌人们说“读代码”——代码是问题的解决方案——通过读代码我不得不猜测问题是什么,并且这很可能出错。我喜欢别人告诉我问题是什么,而不是靠猜。
所以最糟糕的错误是当我写在程序里一个长达多页的注释来解释一些特殊的技巧点时,结果发现在稍后的版本中别人删除了整个注释。
分享到:
相关推荐
《Erlang编程:软件为并发世界而设计》是Joe Armstrong所著的入门级Erlang书籍。作者在Erlang语言的开发中扮演了核心角色,因此他对Erlang的理解深入且独到。这本书内容浅显易懂,非常适合初学者,目的是让读者能够...
在《Erlang程序设计》这本书中,作者Joe Armstrong强调了并发编程的重要性,并提出了一个关键观点:如果想要编写的行为像现实世界中的对象一样的程序,那么这些程序将具有并行结构。这表明,为了模拟真实世界的复杂...
Erlang是一种面向并发的编程语言,由Joe Armstrong编写,被认为是并行编程和分布式系统设计的经典之作。本书不仅覆盖了Erlang的基础知识,还包括并发编程和分布式编程的深入内容。Erlang的设计为程序员提供了处理...
通过这种方式,读者可以从零开始学习Erlang,并逐步掌握其核心功能和编程技巧。 ### 7. 特别准备 文件中多次提到“Prepared exclusively for Kwonjin Jeong”,这表明本书或文件可能是专门为某个人定制的,即...
在《Erlang并发编程》一书中,详细介绍了Erlang语言的核心并发模型和编程范式,包括但不限于串行编程、进程创建、进程间通信、分布式编程以及错误处理等。书中指出Erlang的并发性能得益于其轻量级进程,这些进程是由...
《编程Erlang》是Joe Armstrong所著的一本经典书籍,深入浅出地介绍了Erlang这门函数式编程语言,以及它在并发和分布式系统中的应用。源码分析可以帮助我们更深入地理解Erlang的内在机制和设计哲学。 Erlang是一种...
《编程Erlang:软件为并发世界而设计》是一本由Erlang语言之父Joe Armstrong撰写的权威著作,旨在帮助读者深入理解Erlang语言及其在并发编程领域的独特优势。本书不仅涵盖了Erlang的基本语法和编程技巧,还深入探讨...
"Programming Erlang: Software for a Concurrent World"是Joe Armstrong编写的经典书籍,深入探讨了Erlang的设计哲学和技术细节。 在Erlang中,并发是核心特性之一。通过轻量级进程(Lightweight Processes, LWP)...
【Erlang程序设计(第2版)】是由Erlang之父Joe Armstrong撰写的一本经典著作,专注于介绍Erlang编程语言在并发、分布式和容错系统中的应用。本书适用于初学者和有一定经验的Erlang程序员。作者在书中讨论了如何利用...
到了1985年,Erlang的创始人之一Joe Armstrong加入了实验室,开始了Erlang技术的研究工作。最初的目标是对Prolog语言添加并行支持。1987年,Erlang以Prolog扩展的形式实现了初步的形态,同年Erlang这个名字也被提出...
Erlang是一种通用的并发编程语言,由乔·阿姆斯特朗(Joe Armstrong)、罗伯特·维丁(Robert Virding)和迈克·威廉姆斯(Mike Williams)于1986年在爱立信公司的计算机科学实验室开发。目的是创造一种能应对大规模...
为了更好地掌握Erlang语言,建议从安装环境开始,逐步熟悉其基本语法和编程技巧。《Programming Erlang: Software for a Concurrent World》是一本非常好的入门书籍,它不仅介绍了Erlang的基本概念,还提供了丰富的...
- **Erlang in Anger**: Joe Armstrong(Erlang 之父)的一份演讲稿,讲述了如何在生产环境中处理 Erlang 系统的问题。 ### 7. 示例项目结构 在 `Webserver-master` 压缩包中,可能包含以下文件和目录: - `src`:...
4. **Erlang** - 由Joe Armstrong在Ericsson公司为构建分布式系统而创建,Erlang具有强大的并发和容错机制,常用于电信和实时系统。 5. **F#** - 微软推出的函数式编程语言,结合了.NET框架,可用于开发Windows应用...