Scala 是一门怎样的语言,具有哪些优缺点?

关注者
2,593
被浏览
991,937

63 个回答

由于有<-, =>的存在,在代码里看到<=的时候我花了很长时间去回忆这个运算符是什么意思……

最后靠搜索引擎才想起来是小于等于……

蟹妖啊

我大概0809年左右开始用scala在后端编程,Scala表达力很强,非常适合写一些处理数据的,长期运行,且吞吐量较大的daemon或者服务。但是当初可以使用的框架比较有限,而且scala的程序员也非常少,所以我在当初的公司采用scala服务和ruby服务相结合的办法。

其实如果你只是用scala做后端开发的话,用java也是可以满足需求的,这也是为什么linkedin在大举上Scala之后,又换回了java。

但scala可以让你过深度fp的瘾。fp在做高并发后端服务的时候,有一定的好处,精简流畅,如果你是用纯fp的模式的话,它就会和haskell很像,只要编译通过,就基本不会有运行时的bug(除非你自己把逻辑就给想错了)。twitter现在所有核心服务和大多数后端服务都在scala上,开发还是挺爽的。

另外,immutable的数据模型更利于编写高并发算法,好些朋友可能会担心这创建了很多额外的对象,不过目前从我的实际经验来看,jvm的GC高吞吐量可以非常好的满足需求,我们并没有因为使用immutable集合而造成额外的GC问题。而且合理使用immutable模型,可以有效的减少锁的使用,总的来说,对于大多数后端服务,使用immutable是一个对高并发性能有利的设计。反正我是已经很久没有用过mutable集合以及var了。

另一个方向是大数据处理,这里可以结合spark,比较适合长时间运行的job。不过对于adhoc的job,很多数据科学家可能更愿意使用像presto这样支持sql的工具,而不是写一段程序。这方面其实真用scala的人并不太多。

scala现在是个很尴尬的地位,可用的框架和库是足够了,但用的人和公司还是有点少。北欧有个scala center,他们一定程度在管理scala,这是个非营利组织,大公司可以给他们捐钱,顾问席好像是几万美金一个席位,便宜的很。但是关于他们如何发展,他们不会屈从任何人。还有老马带的phd和博后们,总共也没几个人。他们这帮人其实并不很配合工业界的意见,当然,工业界的意见也不统一。

scala下一个考验是Scala 3,明年scala3会更加具体一些,但可以肯定的是scala3会扔掉Scala2的一些东西,这会造成严重的兼容性问题。其实scala2的小版本升级已经很扯淡了。据我所知,摩根斯坦利出钱正在寻求解决方案。Twitter会怎么做,我们有些讨论,但我不能分享。这会不会造成Scala社区的分化,像python2和python3那样,我现在还不知道。

我觉得scala这个语言肯定会一直生存下去,但也一直会比较小众吧。