我想知道一个最常见的应用程序/网站/解决方案的列表,成功与否。

解释一下为什么它被用于特定的解决方案,而不是其他编程语言,也会非常受欢迎。

列出BAD Erlang案例研究(误用Erlang的案例)也会很有趣。


当前回答

erlang有什么好处?

http://beebole.com/en/blog/erlang/why-erlang/

http://www.aquabu.com/2008/2/15/erlang-pragmatic-studio-day-3-notes

http://www.reddit.com/r/programming/comments/9q0lr/erlang_and_highfrequency_trading/ (jerf回答)

重要的是要意识到Erlang的四个部分:语言本身,vm (BEAM, hipe)标准库(加上github, CEAN等上的模块)和开发环境正在稳步更新/扩展/改进。例如,我记得读到过,当Wings3d的作者意识到它需要改进时,浮点性能得到了改善(我找不到这个来源)。这个人就写了:

http://marian-dan.com/wordpress/?p=324

几年前,Tim Bray的Wide Finder的宣传和所有开始做web应用框架和HTTP服务器的人(至少部分地)导致了改进的正则表达式和二进制文件处理。还有所有集成HiPE和SMP的工作,透析器项目,多单元测试和构建库的涌现,..

困难的是官方文档不能很好地跟上,邮件列表和erlang博客圈的容量正在迅速增长

其他回答

erlang有什么好处?

http://beebole.com/en/blog/erlang/why-erlang/

http://www.aquabu.com/2008/2/15/erlang-pragmatic-studio-day-3-notes

http://www.reddit.com/r/programming/comments/9q0lr/erlang_and_highfrequency_trading/ (jerf回答)

重要的是要意识到Erlang的四个部分:语言本身,vm (BEAM, hipe)标准库(加上github, CEAN等上的模块)和开发环境正在稳步更新/扩展/改进。例如,我记得读到过,当Wings3d的作者意识到它需要改进时,浮点性能得到了改善(我找不到这个来源)。这个人就写了:

http://marian-dan.com/wordpress/?p=324

几年前,Tim Bray的Wide Finder的宣传和所有开始做web应用框架和HTTP服务器的人(至少部分地)导致了改进的正则表达式和二进制文件处理。还有所有集成HiPE和SMP的工作,透析器项目,多单元测试和构建库的涌现,..

困难的是官方文档不能很好地跟上,邮件列表和erlang博客圈的容量正在迅速增长

显然,雅虎使用Erlang制作了一个名为Harvester的东西。关于它的文章在这里:http://www.ddj.com/architect/220600332

我们正在使用Erlang为我们真正实时的基于浏览器的多人游戏Pixza提供后端力量。我们不使用Flash或任何其他第三方插件,尽管游戏是实时多人游戏。我们使用纯JS和COMET技术。Erlang支持Pixza的“真正的实时性”。

ejabberd是最著名的erlang应用程序之一,也是我学习erlang的工具。

我认为这是学习erlang最有趣的项目之一,因为它真正建立在erlang的优势之上。(然而,有些人会说这不是OTP,但不用担心,里面仍然有大量优秀的代码……)

为什么?

XMPP服务器(如ejabberd)可以被视为高级路由器,在最终用户之间路由消息。当然还有其他特性,但这是即时消息服务器最重要的方面。它必须同时路由许多消息,并处理许多TCP/IP连接。

所以我们有两个特征:

处理多个连接 给消息的某些方面路由消息

这些是erlang大放异彩的例子。

处理多个连接

使用erlang构建可伸缩的非阻塞TCP/IP服务器非常容易。事实上,它就是为了解决这个问题而设计的。 考虑到它可以生成数十万个进程(而不是线程,它是一种不共享的方法,设计起来更简单),ejabberd被设计为一组erlang进程(可以分布在多个服务器上):

客户端连接流程 路由器进程 聊天室程序 服务器到服务器进程

他们都在交换信息。

给消息的某些方面路由消息

erlang的另一个非常可爱的特性是模式匹配。 它在整个语言中都有使用。

例如,在以下情况中:

access(moderator, _Config)->  rw;
access(participant, _Config)->  rw;
access(visitor, #config{type="public"})->  r;
access(visitor, #config{type="public_rw"})->  rw;
access(_User,_Config)->  none.

这是存取函数的5个不同版本。 Erlang将根据收到的参数选择最合适的版本。(Config是一个类型# Config的结构,它有一个type属性)。

这意味着,与链接if/else或switch/case来创建业务规则相比,它非常简单,也清楚得多。

总结一下

编写可伸缩的服务器,这就是erlang的全部意义所在。一切都设计得很简单。关于之前的两个功能,我想补充一下:

热代码升级 Mnesia,分布式关系数据库(包括在基本发行版中) 大多数HTTP Erlang服务器都构建在Mochiweb上 二进制支持(解码和编码二进制协议一如既往地简单) 一个很棒的社区,里面有很棒的开源项目(ejabberd, couchdb,还有webmachine, riak和一大堆很容易嵌入的库)

更少的 LOC

还有一篇来自理查德·琼斯的文章。他将一个应用程序从c++重写为erlang:在erlang中减少了75%的行数。

来自Programming Erlang:

(来源:google.com)

许多公司在他们的生产系统中使用Erlang:

•Amazon使用Erlang实现SimpleDB,作为一部分提供数据库服务 亚马逊弹性计算云(EC2)。

•Yahoo !它在其社交书签服务Delicious中使用,该服务拥有超过 500万用户和1.5亿书签url。

•Facebook使用Erlang来支持其聊天服务的后端,处理超过 1亿活跃用户。 •WhatsApp使用Erlang运行消息服务器,每台服务器最多可连接200万用户。

•T-Mobile在其SMS和认证系统中使用Erlang。

•摩托罗拉(Motorola)正在公共安全行业的呼叫处理产品中使用Erlang。

•爱立信在其支持节点中使用Erlang,用于GPRS和3G移动网络 在全球范围内。


最流行的开源Erlang应用程序包括:

•3D细分建模器Wings 3D,用于建模和纹理多边形 网格。

Ejabberd系统,提供可扩展的消息传递和存在协议 基于(XMPP)的即时消息(IM)应用服务器。

•CouchDB“无模式”面向文档的数据库,提供可伸缩性 跨多核和多服务器集群。

•MochiWeb库,提供构建轻量级HTTP服务器的支持。 它被用于为MochiBot和MochiAds等服务提供动力 每天为数百万观众动态生成内容。

RabbitMQ, AMQP消息协议实现。AMQP是新兴的 高性能企业消息传递的标准。