由于并发编程变得越来越重要,我想知道你在这方面对Erlang与Scala的看法.在我看来,Scala拥有更大的用户群,并且可能比Erlang更加光明.此外,Scala是一种java.
我知道这些问题总是有点主观,但未来的投资会更好:Erlang或Scala.甚至是另一种语言?
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,它是一种优秀的语言/平台).
BTW.如果单机并发对您很重要,不应忽视Clojure(http://clojure.org/)(也称为JVM语言).
UPDATE1:如果您喜欢Erlang提供的内容而不是它的语法,请查看elixir-lang.org
UPDATE2:STM已从Akka中删除 - 现在您可以在actor(无类型或类型)和流之间进行选择(混合/匹配).
没关系只需选择一个并坚持一段时间.学习一些东西,做一些很酷的东西,要么继续使用那种语言,要么继续使用另一种语言.
关于学习并发编程,要么一切都会好的.这里的关键是你将学习一些新东西,除非有一个职位空缺,你试图聘请Erlang专门用它,这真的没关系.另外,即使这个开放确实需要Erlang,如果你真的很了解Scala,你仍然可能有很好的机会.
试想一下,如果你刚刚选择了一种并且已经开始学习它,那么你花在尝试选择一门新语言的所有时间本来都会花得更好.
两种语言的核心并不难以学习,也学习它们提供的并发功能.事实上,Scala演员受到Erlang演员的影响.我会去他们两个,花时间看他们的构造,做并发问题的一些测试等.
如果你了解Java,Scala会更自然,因为Erlang更像是prolog.相反,如果你更倾向于数学或逻辑类型的语言,那么从Erlang开始.