我知道这些问题总是有点主观,但更好的是什么 未来投资:Erlang或Scala。甚至是另一种语言?
答案 0 :(得分:86)
Erlang专为并发容错通信系统而设计。您可以轻松编写处理大量网络连接的服务器(并且由于每个Erlang进程有一个垃圾收集器),服务器可以保留软实时特性(即,在GC完成之前,整个服务器不会暂停)。您还可以热交换Erlang代码,将其分布在多个节点上等。这就是为什么(可以说)最可扩展的XMPP服务器(ejabberd)是用Erlang编写的。 Yaws(Web服务器)是Erlang擅长的另一个例子,请参阅:http://www.sics.se/~joe/apachevsyaws.html。 Riak / Couch是使用Erlang构建NoSQL DB的示例。这些是Erlang是一个很好的选择的问题。
但是Erlang VM在原始计算方面没有JVM那么快,因此只要您需要执行一些计算密集型操作(例如财务建模),JVM就会成为您的首选平台。此外,Erlang的并发模型(演员)在语言中被烘焙。如果这不符合您要解决的问题,那么您将不会对Erlang感到满意。
Scala是一种更“通用”的语言,因为并发性,水平可伸缩性或容错性不是语言的一部分。它在库级解决(这就是为什么Scala中至少有3个actor的实现)。好处是您可以选择适合您的域的并发模型。例如,如果您需要软件事务内存(STM),只需选择Akka就可以了(http://akka.io/)。
另外,有一个充分的论点,即使用Scala,您可以利用“JVM投资”和大量JVM库。
您没有提供任何有关您希望使用这些语言编写的软件类型的信息,因此很难给出明确的答案。话虽如此,鉴于以上所有,Scala可能比Erlang“更安全”投资(根本不打击Erlang / OTP,它是一种优秀的语言/平台)。
顺便说一句。如果单机并发对您很重要Clojure(http://clojure.org/)不应该被忽视(也是JVM语言)。
UPDATE1:如果您喜欢Erlang提供的内容而不是语法,请查看elixir-lang.org
UPDATE2:STM已从Akka中删除 - 现在您可以选择(混合/匹配)actor(无类型或类型)和流。
答案 1 :(得分:37)
没关系只需选择一个并坚持一段时间。学习一些东西,做一些很酷的事情,然后继续使用那种语言或转移到另一种语言。
关于学习并发编程,要么一切都会好的。这里的关键是你将学习一些新东西,除非有一个职位空缺,你试图聘请Erlang专门用它,这真的没关系。另外,即使这个开放确实需要Erlang,如果你真的很了解Scala,你仍然可能有很好的机会。
试想一下,如果您刚刚选择了一种并且已经开始学习它,那么您花在尝试选择一种新语言上的所有时间本来都会花得更好。
答案 2 :(得分:5)
两种语言的核心并不难学,也不了解它们提供的并发功能。事实上,Scala演员受到Erlang演员的影响。我会去他们两个,花时间看他们的构造,做并发问题的一些测试等。
如果你了解Java,Scala会更自然,因为Erlang更像是prolog。相反,如果你更倾向于数学或逻辑类型的语言,那么从Erlang开始。