美丽的Erlang代码[关闭]


15

我一直在尝试有关Erlang的知识,而不是我一直在玩的玩具项目。为此,我正在阅读《Erlang编程》以及Armstrong在Software上的一些档案。

我还想阅读一些示例代码(最好是生产代码),这些代码展示了您可以使用Erlang构建的各种东西,而这在其他语言中会非常困难。除了(我假设)Yaws之外,是否有任何公开的美丽的Erlang代码示例可供我阅读以更好地理解该语言并/或查看各种语言构造的惯用用法?

我特别不是在寻找“完成工作”的代码,而是使用有问题的做法或类似“这是您factorial在Erlang中的编写方式”的示例。

同样,任何人都可以推荐学习该语言的任何优秀文献(提到的“ Programming Erlang”除外)吗?出于喜好,您自己曾经学习过一些东西,但是如果有一些社区标准书籍,也可以放进去。


Erlang由Ericcson创建,旨在设计和构建用于电话流量的大规模并行交换机。它是由爱立信设计的,用于支持分布式的,容错的,软实时的,不间断的应用程序。那就是它擅长的问题领域。对于所有其他问题域...您的里程可能会有所不同。
罗伯特·哈维

Answers:



-4

既然添加了标记功能性编程,那么如何在Haskell中编写Erlang编译器或解释器呢?Erlang不再像现在那样是最先进的。我建议像其他一些语言(LISP,Prolog)一样,在一两天内学习Erlang,然后忘记它们。它们只是取消命令式OOP语言的一步。

有关比实现编译器小的任务,请参阅Project Euler

[编辑]要回答评论:

从技术角度来看:Erlang在过去没有多核处理器的情况下是很好的。但是现在-鉴于我对现有的编译器/解释器的了解-它不再像应有的那样扩展。用Haskell编写的解释器可以扩展,编译为Haskell可以使其速度更快,但会删除即时代码替换功能。

从程序员的角度来看:Haskell并不是所有适用任务的最佳选择,但是atm,可能更高级的语言是非常实验性的,那些不适用的任务通常与嵌入式系统(如微控制器和GPU)或数字压缩,其中C和Assembler仍然是最佳选择。

使用Erlang可以比使用其他语言更好地做什么?


4
我并没有声称要学习它,因为它是最先进的。我只是认为它看起来很有趣,可能有些东西可以用它构建,而其他语言则不容易。如果您的回答是“对于所有适用的任务,Haskell是更好的选择”,该如何特别地告诉我为什么(而不只是模糊地断言),然后回答Haskell而不是Erlang的最初问题?
Inaimathi 2010年

1
我不知道这个答案有那么糟糕,尽管它确实绕过原始问题。如果您想看到comanad在谈论的某种可爱的Haskell,请查看en.wikibooks.org/wiki/Write_Yourself_a_Scheme_in_48_Hours它是一个通过编写方案解析器来教授haskell,parsec解析库以及方案的教程。 。我觉得解析器组合器是功能语言中更漂亮的东西之一。它们也有点实用。一旦知道如何编写解析器,就可以设计自己的语言来解决特定问题。
CodexArcanum 2010年

1
“用Erlang可以比使用其他语言更好地做什么?” 我不知道; 这就是为什么我试图学习它。我的直觉告诉我,一种语言的主要构造是过程(与CL中的闭包,Scheme中的lambda或python中的字典相对)将提供一些有趣的东西。Haskell也具有功能性,并且具有类似的模式匹配结构,但是并不会一直关注并发。实际上,Haskell中的主要构造似乎就是类型,这让我认为它们是非常不同的动物。
Inaimathi 2010年

2
@CodexArcanum-AFAIK,Erlang和OTP在Mozilla Public License的衍生版本下可用,并且可以从Debian存储库中免费获得。您所说的“系统是专有的”是什么意思?
Inaimathi 2010年

1
@comonad-我的意思是“ Haskell是所有适用任务的更好选择”是“对于我可以用Erlang完成的每一项任务,Haskell可以做得更好”。我并不是要暗示您可以使用一种语言来完成所有编程工作,或者我只是想在我的所有项目中仅使用一种语言。您似乎在问“何时可以使用Haskell为何使用Erlang?”,这意味着您认为Haskell直接优越。我希望您澄清一下,也许支持这一说法。
Inaimathi 2010年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.