programming-languages erlang历史 - 你为什么决定“反对”使用Erlang?





functional-programming (13)


避免Erlang的最好理由是当你无法承担编程的功能。

我几周前读了一篇反Erlang博客的文章,作者对Erlang的批评之一是他无法弄清楚如何在每次用相同的参数调用函数时使函数返回不同的值。 他真正没有想到的是,Erlang是故意的。 这就是Erlang如何在没有明确锁定的情况下在多处理器上运行得如此之好。 纯功能编程是无副作用的编程。 你可以用胳膊扭曲Erlang,像我们咆哮的博主想要的那样工作,增加副作用,但是这样做可以抛弃Erlang提供的价值。

纯函数式编程并不是唯一正确的编程方式。 不是每件事都需要数学严谨。 如果您确定您的应用程序最好是用错误使用术语“功能”的语言编写的,那么最好将Erlang从列表中删除。

你是否真的“试过”(意味着编程,而不只是阅读一篇文章)Erlang并决定反对它的一个项目? 如果是这样,为什么? 另外,如果你选择回到你的旧语言,或者使用F#,Haskell,Clojure,Scala或其他功能语言,那么这也很重要,并说明原因。




我甚至不会去看Erlang。

两篇博客文章为我贴上了这篇文章:

  1. Erlang机器遍历整个列表以确定他们是否有要处理的消息,获取消息的唯一方法是指遍历整个列表(我怀疑通过pid过滤消息还涉及到整个消息列表的走动)

    http://www.lshift.net/blog/2010/02/28/memory-matters-even-in-erlang

  2. 事实上,没有奇迹,Erlang并没有提供太多的服务来处理不可避免的重载 - 例如,它仍然留给应用程序员处理检查消息队列中的可用空间(据推测,通过走队列来计算当前长度,我想没有内置的机制来确保发件人之间的公平性)。

    erlang - 如何限制消息队列或模拟它?

在我的书中,(1)和(2)都没有那么天真,我相信在Erlang机器中还有更多类似性质的软件“宝石”。

所以,对我来说没有Erlang。

看来,一旦你必须处理一个需要高性能的大型系统,C ++ + Boost仍然是镇上唯一的游戏。

接下来我要看看D。




我想将Erlang用于一个项目,因为它具有令人惊叹的可扩展性和CPU数量。 (我们使用其他语言,偶尔撞墙,让我们不得不调整应用程序)

问题是我们必须在几个平台上交付我们的应用程序:Linux,Solaris和AIX,不幸的是,目前没有针对AIX的Erlang安装。

作为一项小型操作,无法移植和维护AIX版本的Erlang,并要求我们的客户使用Linux作为我们应用程序的一部分,这是不行的。

我仍然希望AIX Erlang能够到达,所以我们可以使用它。




一些原因:

  • 因为它看起来与任何习惯于C语言系列的人都是陌生的

  • 因为我希望能够在Java虚拟机上运行,以利用我所了解和理解的工具(如JConsole)以及已经进入JIT和GC的多年努力。

  • 因为我不想重写多年来建立起来的所有(Java)库。

  • 因为我不知道Erlang的“生态系统”(数据库访问,配置,构建等)。

基本上我熟悉Java,它的平台和生态系统,我已经投入了很多精力来构建在JVM上运行的东西。 转移到scala 更容易




我从大学时就认识Erlang,但从未在我自己的项目中使用过它。 主要是因为我主要开发桌面应用程序,而Erlang并不是制作漂亮图形用户界面的好语言。 但我很快就会实现一个服务器应用程序,我会试试Erlang,因为这是它的优点。 但我很担心我需要更多图书馆,所以也许我会用Java来尝试。




我从并发的角度来看爱Erlang。 Erlang真的做了并发权。 主要是因为语法,我没有最终使用erlang。

我不是贸易的功能程序员。 我通常使用C ++,所以我很想要在样式之间切换(OOP,命令式,元等)。 感觉Erlang迫使我崇拜不变数据的神牛。

我喜欢它的并发性,简单,美观,可扩展,强大的方法。 但是在Erlang编程的整个过程中,我一直在想,人们更喜欢Java的一个子集,它不允许在线程和使用的Erlangs并发模型之间共享数据。 我认为,尽管Java有限制语言的最佳选择,但功能集与Erlang的流程和渠道兼容。

就在最近,我发现D编程语言提供了Erlang风格的并发性和熟悉的c风格语法和多范式语言。 我还没有尝试过任何与D完全同步的东西,所以我不能说它是否是一个完美的翻译。

所以我专业地使用C ++,但尽我所能为Erlang中的大规模并发应用建模。 在某些时候,我想给D的并发工具一个真正的试驾。




对我来说,Erlang动态输入的事实让我很担心。 虽然我确实使用动态类型化语言,因为它们中有些是非常面向问题的(使用Python,我解决了很多问题),但我希望它们是静态类型化的。

也就是说,我实际上打算给Erlang一段时间的尝试,而且我刚开始下载源代码。 所以你的“问题”毕竟取得了成功。 ;-)




虽然我没有,但互联网上的其他人也有,例如

我们研究了C ++和Erlang在为美国海军实施平行声射线追踪算法方面的相对优点。 与基于pthreads的C ++编程相比,我们发现并行Erlang的学习曲线小得多,调试环境更好。 我们的C ++实现性能比Erlang程序至少高出12倍。 尝试在IBM Cell BE微处理器上使用Erlang,Erlang的内存占用情况令人沮丧。 (Source)

还有一些更接近我的内心的东西,我记得在ICFP大赛结束后回顾:

编码非常简单,将伪代码翻译成C ++。 我本来可以使用Java或C#,但是我正处于C ++高级编程中一样容易的地步,并且我希望保留快速降低到某种低级别位置的选项(如果它出现的话)直到它。 Erlang是我最喜欢的入侵语言,但担心会遇到一些我无法从中解脱出来的性能问题。 (Source)




JVM不是一个工具,它是一个平台。 尽管我都赞成选择最适合这项工作的工具,但平台已经基本确定。 除非我从头开始独立开发一些东西,并且不需要重新使用任何现有的代码/库(三个方面已经不太可能孤立),我可以自由选择平台。

我确实使用了多种工具和语言,但主要是针对JVM平台。 如果不是我所有的项目都会排除Erlang,就像其中一些概念一样有趣。

西尔维奥




将其用于专有的,多层次的二进制协议的消息网关。 用于服务器和服务之间关系的OTP模式以及二进制模式匹配使开发过程变得非常简单。 对于这样的用例,我可能会再次倾向于Erlang。




虽然我喜欢Erlang运行时和OTP平台的许多设计方面,但我发现它是一种非常烦人的编程语言,逗号和句号完全是蹩脚的,并且通常需要重写许多行的最后一个字符代码只是改变一行。 另外,一些在Ruby或Clojure中很简单的操作在Erlang中很乏味,例如字符串处理。

对于依赖共享数据库的分布式系统,Mnesia系统非常强大,并且可能是一个不错的选择,但我使用语言进行编程学习并获得乐趣,Erlang令人讨厌的因素一旦超过了基础,就开始超过了趣味因素银行账户教程,并开始为XMPP服务器编写插件。




我决定不使用Erlang来处理我的项目,该项目将在单个多处理器系统上运行大量共享数据,并且由于Clojure的原因,Clojure确实获得了共享内存并发性。 当我在分布式数据存储系统上工作时,Erlang非常适合,因为Erlang真的非常适合分布式消息传递系统。 我将该项目与该语言中的最佳功能进行比较,然后相应地进行选择




首先,Javascript是初级程序员的JS的入门介绍 - 它创造性地使用JS语法解释基本的编程概念。 Head First系列基于研究技术,帮助您学习和记忆新信息。 他们让你做了很多练习和拼图,看起来好像很少,但真的有助于巩固你大脑中的知识。

我真正喜欢的一个练习是在他们解释数据类型之后,他们展示了一张城市街道的图片,并说“标记您可以在此图片中找到的所有数据类型”。 所以汽车上的闪光灯是一个布尔值,商店上的标志是一个字符串,地址是一个数字。 这帮助我了解如何将真实信息转化为程序。

根据这本书,我会说Head First系列是第一次学习某些东西好方法,但是它们所具有的故事式格式会使它们难以用作参考。





programming-languages functional-programming erlang