你是否真正"尝试过"(指编程而非仅仅阅读文章)Erlang,并且因为某个项目而放弃了它?如果是的话,为什么?另外,如果你选择回到旧语言或使用其他函数式语言如F#、Haskell、Clojure、Scala或其他语言,则也计入其中,请说明原因。
你是否真正"尝试过"(指编程而非仅仅阅读文章)Erlang,并且因为某个项目而放弃了它?如果是的话,为什么?另外,如果你选择回到旧语言或使用其他函数式语言如F#、Haskell、Clojure、Scala或其他语言,则也计入其中,请说明原因。
我从Erlang转回Haskell,用于我的个人项目,因为Haskell拥有惊人的类型系统。Erlang提供了大量工具来处理出现问题的情况。而Haskell则提供了让你在一开始就避免错误的工具。
当使用一个强类型系统的语言时,每次编译实际上都能证明你的代码是自由定理。
Haskell的类型类机制也提供了很多重载糖,但对我来说,这主要是次要的--即使它使我能够表达许多在Erlang中会非常冗长、非成语化和不可用的抽象(例如Haskell的category-extras)。
我喜欢Erlang,我喜欢它的通道和它的轻松可扩展性。当我需要这些东西时,我就会转向它。Haskell并不是万能药。我放弃了更好的操作空间消耗理解。我放弃了神奇的一遍式垃圾收集器。我放弃了OTP模式和所有轻松的可扩展性。
但我很难放弃的是那种安全保护措施,正如通常所说的,在Haskell中,如果类型检查通过,那么它很可能是正确的。
我们使用 Haskell、OCaml 和(现在)F#,所以对我们来说与 C 语言的语法不相关。相反,我们跳过 Erlang 的原因是:
可能还有其他原因我现在想不起来了,但这些是主要原因。
rand()
是函数设计中一个有趣的研究对象。许多标准 C 库函数都是不可重入的,其中包括 rand()
。许多 C 库实现提供了可重入的替代方案,这是有充分理由的。(例如,我正在使用的机器上的 C 库提供了纯函数式的可重入 rand_r()
。)Erlang 提供了类似 C 的 random:uniform()
,但也提供了纯函数式的 random:uniform_s()
。在两种语言中都应该使用使内部状态显式的版本。 - Warren Young我已经在几个项目中使用了Erlang。 我经常将其用于restful服务。 然而,对于像Ruby on Rails这样的工具更适合的复杂前端Web应用程序,我并不使用它。 但是,对于幕后的powerbroker,我知道没有比Erlang更好的工具。
我也使用了一些用Erlang编写的应用程序。 我有点使用CouchDB和RabbitMQ,并设置了一些EJabberd服务器。 这些应用程序是其领域内最强大、最易用和最灵活的工具。
因为它不使用JVM而不想使用Erlang,在我看来相当愚蠢。 JVM不是一个神奇的工具,在世界上做任何事情都是最好的。 在我看来,能够从不同工具库中选择,并且不被困在单一语言或框架中,是区分专家和代码猴子的关键。
PS:在重新阅读我的评论时,我注意到它看起来像我正在称呼oxbow_lakes为代码猴子。 我真的没有,如果他这样认为,我很抱歉。 我是在概括程序员类型,我永远不会根据他的一个评论就以如此负面的方式称呼某个人。 他可能是一位很好的程序员,尽管我鼓励他不要把JVM当作某种无法妥协的关键点。
虽然我没有,但互联网上的其他人有,例如:
我们调查了在美国海军中实现并行声学射线追踪算法的C++和Erlang的相对优点。我们发现,与基于pthread的C ++编程相比,使用并行Erlang的学习曲线要小得多,并且具有更好的调试环境。我们的C ++实现至少比Erlang程序快12倍。在IBM Cell BE微处理器上使用Erlang的尝试受到Erlang的内存占用的限制。(来源)
还有一些更贴近我的内心的东西,我记得在ICFP竞赛之后阅读过:
编码非常简单,将伪代码转换为C ++即可。我可以使用Java或C#,但是我已经达到了在C ++高级别上编程同样容易的地步,并且我希望保留快速降级到一些低级位操作的选项,如果必要的话。 Erlang是我另一个喜欢的语言,但是担心遇到一些性能问题,我无法从中解脱出来。(来源)
对我而言,Erlang 是一种动态类型语言,这让我有些警惕。虽然我确实使用过一些动态类型语言,因为其中一些非常针对问题(像 Python,我用它解决了很多问题),但我仍然希望它们是静态类型的。
话虽如此,实际上我打算尝试一下 Erlang 已经开始下载源代码。所以你的“问题”毕竟达到了某种效果。;-)
对于习惯了C语言家族的人来说,它看起来很陌生
因为我希望能够在Java虚拟机上运行,以利用我熟悉和理解的工具(如JConsole)以及多年来已经投入到JIT和GC中的努力。
因为我不想重写我多年来构建的所有(Java)库。
因为我对Erlang的“生态系统”(数据库访问、配置、构建等)一无所知。
基本上,我熟悉Java及其平台和生态系统,并且已经投入了大量精力来构建在JVM上运行的东西。相比之下,转移到Scala更加容易。
我在大学时了解了Erlang,但迄今为止从未在自己的项目中使用过它。主要是因为我主要开发桌面应用程序,而Erlang不适合制作漂亮的GUI界面。但我将很快实现一个服务器应用程序,并尝试使用Erlang,因为这正是它擅长的领域。但我担心我需要更多的库,所以也许我会尝试使用Java。
我决定不使用Erlang来运行我的项目,因为这个项目需要在一个多处理器系统上共享大量数据,而Clojure真正擅长于共享内存并发。当我在分布式数据存储系统上工作时,Erlang是一个很好的选择,因为Erlang在分布式消息传递系统方面表现出色。 我将项目与语言中最好的特性进行比较,并选择相应的语言。
我曾将其用作专有的、多层二进制协议的消息网关。由于 OTP 模式适用于服务器和服务之间的关系,以及二进制模式匹配,使得开发过程非常容易。对于这种用例,我可能会再次偏爱 Erlang 而不是其他语言。
ghci
)。对我来说,这将静态(~全类型)和动态语言的优点结合在了一起。 - Konrad Rudolph