你是否真正"尝试过"(指编程而非仅仅阅读文章)Erlang,并且因为某个项目而放弃了它?如果是的话,为什么?另外,如果你选择回到旧语言或使用其他函数式语言如F#、Haskell、Clojure、Scala或其他语言,则也计入其中,请说明原因。
你是否真正"尝试过"(指编程而非仅仅阅读文章)Erlang,并且因为某个项目而放弃了它?如果是的话,为什么?另外,如果你选择回到旧语言或使用其他函数式语言如F#、Haskell、Clojure、Scala或其他语言,则也计入其中,请说明原因。
从并发性的角度来看,我喜欢Erlang。 Erlang确实做到了并发。但是,因为语法问题,我最终没有使用Erlang。
我的职业并不是函数式编程员。我通常使用C++,所以我很珍惜我能够在面向对象编程、命令式编程和元编程等各种风格之间切换的能力。感觉Erlang迫使我崇尚不可变数据的神圣牛。
我很喜欢Erlang对并发的处理方式——简单、美观、可扩展、强大。但是,在编写Erlang程序的整个过程中,我一直在想,我更喜欢一个子集Java,该子集禁止线程之间共享数据,并使用Erlang的并发模型。我认为Java是限制语言特性且与Erlang的进程和通道兼容的最佳选择。
最近,我发现D编程语言提供了类似Erlang的并发性,具有熟悉的c样式语法和多范式语言。我还没有用D尝试过大规模并发,所以我无法判断它是否是完美的替代。
因此,就我的职业而言,我使用C++,但尽最大努力像在Erlang中一样对大规模并发应用程序进行建模。在某个时候,我想真正地测试一下D的并发工具。
我甚至不会考虑使用Erlang。
有两篇博客文章让我认为:
Erlang机制需要遍历整个列表以确定是否有消息要处理,而获取消息的唯一方法是遍历整个列表(我怀疑通过pid过滤消息也涉及遍历整个消息列表)
http://www.lshift.net/blog/2010/02/28/memory-matters-even-in-erlang
没有奇迹,实际上,Erlang并没有提供太多服务来处理不可避免的超载 - 例如,仍然留给应用程序员检查消息队列中是否有可用空间(可能通过遍历队列来确定当前长度,并且我想没有内置机制来确保发送方之间的某种公平性)。
这两点都在我的书中被认为是非常幼稚的,我相信还有更多类似的软件“宝石”隐藏在Erlang机制中。
所以,对于我来说,不使用Erlang。
似乎一旦你必须处理需要高性能的大型系统,C++ + Boost仍然是唯一的选择。
我接下来会看看D语言。
我想使用Erlang开展一个项目,因为它在应对多个CPU方面的可扩展性非常强。(我们使用其它语言时偶尔会遇到瓶颈,不得不对应用进行调整)
问题在于我们必须在几个平台上交付我们的应用程序:Linux、Solaris和AIX,而不幸的是目前没有适用于AIX的Erlang安装版。
我们是一个小型团队,难以投入精力来移植和维护AIX版本的Erlang,并且要求我们的客户在应用程序的某个部分使用Linux是行不通的。
我仍然希望有一款适用于AIX的Erlang版本可以问世,这样我们就可以使用它了。