想详细说明关于 Erlang 性能的声明吗?

Care to expound on this statement made on Erlang performance?

There's something else to keep in mind: while Erlang does some things very well, it's technically still possible to get the same results from other languages. The opposite is also true; evaluate each problem as it needs to be, and choose the right tool according to the problem being addressed. Erlang is no silver bullet and will be particularly bad at things like image and signal processing, operating system device drivers, etc. and will shine at things like large software for server use (i.e.: queues, map-reduce), doing some lifting coupled with other languages, higher-level protocol implementation

我正在学习 Erlang,这个 link (http://learnyousomeerlang.com/introduction#kool-aid) 让我很好奇 Erlang 应用程序好与坏的原因。谁能解释一下这个说法?

为什么 Erlang excel 在某些上述领域而不在其他领域?

while Erlang does some things very well, it's technically still possible to get the same results from other languages

让我们面对现实吧,实际上所有的编程语言或多或少都可以做任何事情,并且有方法连接到 C 库以访问任何它们没有的本地库。

最明显的一点是,所有 Erlang 归根结底都是 C 语言,还有一点汇编语言,但这与重点无关。

因此应该很清楚,任何你可以用 Erlang 编写的东西都可以用 C 编写,并且因为你消除了一层抽象和解释,如果你做得合理,它应该更快。有时会快一点。有时会快很多。

Erlang is no silver bullet and will be particularly bad at things like image and signal processing, operating system device drivers, etc.

这是细节字节和移位魔法的舞台,如果您为移位的每一位都引入一个抽象层……您很容易最终将可实现的最佳性能降低多个数量级。

and will shine at things like large software for server use (i.e.: queues, map-reduce), doing some lifting coupled with other languages, higher-level protocol implementation

这是有趣的一点。我们已经确定,如果您用 C 编写它,除非您做得足够差,否则结果只会在性能方面更好。

但性能并不是一切。在当今世界 CPU 内存很便宜,但上市时间非常重要。一家公司可能会花费数千美元购买 运行 您的应用程序所需的一些额外硬件,因为它是用 Erlang 而不是 C 编写的,但可以节省(或赚取)数百万美元,因为该产品是第一个推向市场的。

事实是,如果您将给定的软件问题与具有正确范例的高级语言相匹配,普通软件工程师通常可以比用 C 语言编写产品快很多倍。

此外,编写 C 语言很容易出错,并且为犯错和错误选择提供了更大的空间。这意味着软件工程师可能会用 C 写一些东西,而等效的 Erlang,基于一些非常精细调整的成熟聪明的 C,如果 Erlang 本身很好,它可能会表现得更好!

evaluate each problem as it needs to be, and choose the right tool according to the problem being addressed

总的来说,Erlang 是一个非常棒的工具,但它确实比其他领域更适合某些问题领域。有些问题用 perl 或 C、python 等可能会更好地解决。当它适合问题领域时,Erlang 可能是无与伦比的,但如果它不适合,那绝对是最好的考虑别的。

Erlang 和 C 都是图灵完备的(除了没有无限内存),因此如果您不关心绝对性能或内存量或使用的其他系统资源,它们都可以用来计算任何东西。

在内存受限的系统中(tinyDuino,et.al),语言运行时占用空间(以及支持该运行时所需的 OS 资源)可能是一个区别因素。对于每 multiply-accumulate 每秒都很重要的问题(影响总成本 MegaWatt-days 的功率或微秒的延迟),任何额外的类型或值检查、复制或转换,这可能隐含在形式语言中定义,可能会在处理器周期、高速缓存未命中或 run-time 内存管理方面增加性能成本。对于某些类型的应用程序,可以指定一个 C 程序,而无需过多的上述开销。但是,在需要此类开销以获得稳健解决方案的应用程序中,与编写等效(或更多)稳健解决方案的预期人力成本相比,性能优势消失了。

当您想创建时,Erlang 是一个很好的解决方案:

  • 实时系统:他们需要可预测的响应时间和 Erlang 抢占式调度每个进程垃圾收集 功能在其中大放异彩。

  • 分布式系统: Erlang 具有开箱即用的分发机制和称为 Erlang 分布式协议的标准协议.

  • Fault Tolerant Systems:Erlang的light-weight进程允许一个进程崩溃而不会使其他进程崩溃,以及它的进程机制相互监督和监视适用于容错系统。

  • 并发系统: 虽然用 C 和 Java 等语言编写并发系统是可能的,但它可能很难且容易出错。但是 Erlang 具有内部原语,这使得编写并发程序变得如此容易。


当您需要编写必须执行 数字运算图像处理 等程序时,Erlang 不是一个好的选择因为您的 Erlang 代码运行在某些抽象层之上。然而,Erlang 中有官方机制可以利用 C performance. Also Hipe(高性能 Erlang)项目值得考虑。