为什么你决定使用Erlang"反对"?

Zub*_*air 72 erlang programming-languages functional-programming

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

Edw*_*ETT 49

为了Haskell惊人的类型系统的简单优点,我从Erlang返回了Haskell的个人项目.Erlang为您提供了大量工具来处理出错的时间.Haskell为您提供工具,让您在第一时间避免出错.

使用强类型系统的语言工作时,每次编译时都可以有效地证明代码的自由定理.

你也从Haskell的类型类机器中获得了一堆重载糖,但这在很大程度上是次要的 - 即使它确实允许我表达一些在Erlang中非常冗长或非惯用且无法使用的抽象(例如Haskell的类别的演员).

我喜欢Erlang,我喜欢它的频道和轻松的可扩展性.当这些是我需要的东西时,我转向它.哈斯克尔不是灵丹妙药.我放弃了对空间消耗的更好的操作理解.我放弃了神奇的一通垃圾收集器.我放弃了OTP模式和所有轻松的可扩展性.

但是我很难放弃安全毯,就像通常所说的那样,在Haskell中,如果它有类似的话,它可能是正确的.

  • 好点子!我听说向Erlang添加类型系统很棘手,主要是因为Hot Code Swap.阿姆斯特朗和佩顿琼斯在这次采访中谈到了哈斯克尔和埃尔朗的类型:http://www.infoq.com/interviews/armstrong-peyton-jones-erlang-haskell (6认同)
  • 请注意,Haskell甚至不需要写 - 编译 - 执行循环,因为它支持REPL(例如,通过`ghci`).对我而言,它结合了静态(~ally typed)和动态语言世界的最佳组合. (2认同)
  • 然而,@ Konrad Haskell的REPL有限制.首先,你不能在其中写入`data`定义.您需要将其写入文件,并使用REPL过程.ghci和拥抱. (2认同)
  • @Sanoj:谢谢你把这次采访联系起来吧.我正在阅读Seibel的"工作中的编码员",此时两人都有发言权,但彼此相邻却令人难以置信.引用/.利默里克:+5(有洞察力) - http://xkcd.com/301/ (2认同)

Sha*_*aun 26

我们使用Haskell,OCaml和(现在)F#,因此对于我们而言,它与缺少类C语法无关.相反,我们跳过Erlang,因为:

  • 它是动态类型的(我们是Haskell类型系统的粉丝)
  • 不提供"真正的"字符串类型(我理解为什么,但令人讨厌的是,这还没有在语言级别更正)
  • 倾向于使用较差(不完整或未维护)的数据库驱动程序
  • 它不包括电池,似乎没有社区正在努力纠正这一点.如果是这样的话,那就不是很明显了.Haskell至少拥有Hackage,我猜这就是我们选择那种语言而不是其他语言的原因.在Windows环境中,F#即将拥有最终的优势.

可能还有其他我现在想不到的原因,但这些是主要观点.


War*_*ung 25

避免Erlang的最佳理由是当你无法承诺编程的功能时.

几周前我读了一篇反Erlang的博客咆哮,作者对Erlang的一个批评是他无法弄清楚每次用相同的参数调用函数时如何使函数返回不同的值.他真正没想到的是,Erlang是故意的.这就是Erlang如何在没有显式锁定的情况下在多个处理器上运行良好的方式.纯功能编程是无副作用的编程.你可以像我们的咆哮博客一样武装扭曲Erlang,添加副作用,但这样做会丢掉Erlang提供的价值.

纯函数式编程不是唯一正确的编程方式.并非一切都需要在数学上严谨.如果您确定您的应用程序最好用滥用术语"功能"的语言编写,最好将Erlang从列表中删除.

  • `rand()`在函数设计中进行了一项有趣的研究.许多标准C库函数都是不可重入的,其中有`rand()`.很多C库实现提供了可重入的替代方案,这是有充分理由的.(我现在使用的机器上的C库现在提供了纯粹的函数重入`rand_r()`.)Erlang确实提供了类似C的`random:uniform()`,但也提供了纯函数`random: uniform_s()`.应该使用在两种语言中使内部状态显式的版本. (2认同)

Jon*_*tar 16

我已经在一些项目中使用过Erlang.我经常用它来提供宁静的服务.我不使用它的地方适用于复杂的前端Web应用程序,其中Ruby on Rails等工具要好得多.但对于幕后的权力经纪人,我知道没有比Erlang更好的工具.

我还使用了一些用Erlang编写的应用程序.我稍微使用了CouchDB和RabbitMQ,并且我已经设置了一些EJabberd服务器.这些应用程序是其领域中最强大,最简单和最灵活的工具.

不想使用Erlang,因为它不使用JVM在我看来很傻.JVM不是一个在世界上做所有事情最好的神奇工具.在我看来,能够从不同工具的武器库中进行选择,而不是陷入单一语言或框架,这就是专家与代码猴子的区别.

PS:在上下文中阅读我的评论后,我注意到它看起来像是在叫oxbow_lakes一个代码猴子.如果他这样做,我真的不是并且道歉.我正在概括程序员的类型,我绝不会根据他的一条评论称个人为负面名称.他可能是一个优秀的程序员,尽管我鼓励他不要让JVM成为某种交易破坏者.

  • 我认为整个"它看起来不像C因此是坏的"比JVM位差一点.如果你问我,这一切都有点傻.但是没有人问我,所以我应该在我的角落里保持安静.;) (3认同)

Wil*_*ill 9

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

我们研究了C++和Erlang在为美国海军实施并行声线追踪算法时的相对优点.我们发现并行Erlang的学习曲线和调试环境要小于基于pthreads的C++编程.我们的C++实现比Erlang程序至少提高了12倍.Erlang的内存占用使得在IBM Cell BE微处理器上使用Erlang的尝试受挫. (资源)

更接近我的心,我记得在ICFP比赛结束后回顾:

编码非常简单,将伪代码转换为C++.我本可以使用Java或C#,但我现在正处于C++高级编程同样容易的程度,而且我想保留快速下降到一些低级别比特的选项,如果它来的话到它.Erlang是我最喜欢的黑客入侵语言,但担心会遇到一些我无法自拔的性能问题.(资源)

  • Erlang是高可靠性高事务环境的绝佳选择.有可能,您通过基于Erlang的交换机拨打电话.它在互联网服务器中越来越常见,例如MQ和Jabber. (8认同)

Kon*_*lph 7

对我来说,Erlang动态输入的事实让我很谨慎.虽然我确实使用动态类型语言,因为它们中的一些非常注重问题(使用Python,我解决了很多问题),我希望它们是静态类型的.

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


oxb*_*kes 6

原因如下:

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

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

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

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

基本上我熟悉Java,它的平台和生态系统,我已经投入了大量精力来构建在JVM上运行的东西.这是比较容易迄今为止移动到斯卡拉

  • 许多语言看起来都不像C.在任何情况下,这是一个真正的赞成还是骗局?我当然理解语法偏好,但我不确定我是怎么看到这完全无视语言的真正原因. (23认同)
  • 这些都是很好的理由,但你有没有在Erlang中编程?这个问题是针对实际尝试过的人. (7认同)
  • @ZJR - 答案不是我真的喜欢Java(相反,我现在在scala中做所有事情),但我真的*了解*JVM!Java和JVM不是一回事! (4认同)
  • 那里有一些好处,但总的答案是"我决定反对它因为我真的喜欢java"给我. (3认同)
  • @Rayne Sheesh,冷静下来.克里斯没有攻击你.恰恰相反,他只是说,由于年轻,你不会长期做同样的事情,而且很容易适应变化.如果有的话,他会把你的年龄视为优势.他不再分享的一个,所以他对事物的看法是不同的.例如,考虑驾驶.在美国开车30年的人在英国驾驶时比在刚刚开始驾驶的人中更难以适应. (2认同)

Jon*_*nas 6

我从大学开始就认识Erlang,但到目前为止我从未在自己的项目中使用它.主要是因为我主要开发桌面应用程序,而Erlang并不是制作漂亮GUI的好语言.但是我很快就会实现一个服务器应用程序,我会尝试一下Erlang,因为这是它的好处.但我担心我需要更多的图书馆,所以也许我会尝试用Java代替.

  • 是的,你可以在Erlang中编写GUI.但是如果你想要像WPF这样更先进的东西,这很棘手. (4认同)
  • Joe Armstrong没有专门为X windows协议编写Erlang适配器吗?我原本以为在Erlang中编写GUI实际上非常简单. (2认同)

Art*_*ldt 6

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


yaw*_*awn 5

用于专用的多层二进制协议的消息网关.服务器的OTP模式和服务之间的关系以及二进制模式匹配使开发过程变得非常容易.对于这样的用例,我可能会再次使用Erlang而不是其他语言.