Scala,未来的Java?

30

我正在试图弄清Scala的流行程度,以及有多少SO用户实际在工作中使用它?


7
我建议您将这个内容标记为“社区 wiki”,否则很有可能会被关闭,因为它被认为是“主观争论”。 - Carl Smotricz
7个回答

49

我在金融科技领域工作已经使用Scala一年了,绝不想回到Java!最初考虑迁移时我最担心的是:

  • 工具支持(IDE怎么样?)
  • 与现有Java库和构建技术(antSpring,内部编写的东西)的互操作性
  • 人才储备(哪里可以找到优秀的Scala开发人员?)
  • 过渡时间(多久之后才能编写出好的Scala代码?)

我发现 IDEA 的 Scala 插件(现在的免费v9社区版)非常出色:虽然不如Java的工具支持那么好,但对我们的需求足够好了。它具有基本的重构和调试功能以及出色的语法高亮显示。我的Eclipse经验非常令人失望:我了解到Scala 2.8有很大改进,但我最近看到的Eclipse-nightly实在是糟糕透了。

与Java的互操作性是一流的——我完全没有遇到任何问题,仍然大量使用Spring和我们定制的(基于ant的)构建系统。开发者资源只有对于人员流动率中等到高的大公司才是一个问题;对我们来说,这还不是一个问题,面试者也表达了使用Scala的兴趣。

也许最大的问题是过渡时间。我发现需要 2 周才能写出任何合理的东西,3 个月才能真正“get it”,6 个月到 1 年才能开始利用 Scala 的功能和 DSL 方面。那么,对我来说真正的收益是什么呢?
  1. 内置类型推断、协变和逆变(代码更可读、更直观 - 泛型“只是有效的”,不像 Java 那样可能非常痛苦)
  2. 函数式编程风格和闭包(代码更易读,编写更快)
  3. Actor 并发库(极大地简化了并发编程)

所以总结一下:

  • Scala 好吗? - 它真是太棒了
  • 它准备好用于真正的企业使用吗?是的 - 现在已经有很多公司在使用,包括 Twitter、Sony 和 EDF
  • 采用代价值得吗?是的 - 绝对值得

我不会宣传Twitter使用它...尤其是考虑到Twitter的声名狼藉。在我真正创建Twitter账户之前,我就已经知道Twitter Fail Whale是什么了。 - Powerlord
2
Twitter的消息队列从Ruby迁移到Scala是在过去的18个月内发生的。很可能Scala迁移是为了解决您熟悉的问题。我自己不是Twitter用户! - oxbow_lakes
2
我没有直接了解情况,但Twitter迁移到Scala是为了解决“鲸鱼”故障问题,据一些最近的报告显示,在迁移后,Twitter现在比Facebook拥有更好的正常运行时间。 - Alex Neth
http://www.theregister.co.uk/2012/11/08/twitter_epic_traffic_saved_by_java/ - giannis christofakis

6

没有人能预知未来,任何时候都可能有更好的东西出现(或者是背后有强大支持的更糟糕的东西)。

有很多关于这个话题的文章、播客等等。在这里,我建议你阅读:https://stackoverflow.com/questions/33744/is-scala-the-next-big-thing

就我个人而言,我认为Scala很有前途,但可能无法吸引大众。今天Java的许多生产使用都围绕J2EE展开,我不认为这些人会转换。对于非Java用户,更成熟的语言如Python可能提供他们所需的所有函数特性,即使不使用JVM也可以。


3
我从事Java EE开发,我们需要比Java更好的语言。但由于缺乏企业/社区支持(“强大”的意思),我们并不转向Scala或Groovy。必须留在JVM中,因为我们不能轻易替换所有已开发的Java代码。与Scala相比,Python似乎不完整且针对操作系统脚本编写。我尝试过Jython、JRuby、Groovy和Scala,最好的Java集成来自Groovy和Scala。但由于缺乏正式规范,Groovy看起来不像Scala和Java本身那样专业。因此,我希望我们都能使用Scala。 - fernacolo

4
我刚开始学习Scala,发现在金融领域中越来越受欢迎。现在有更多的人/同事对此感兴趣。许多人要求我随时向他们报告我的进展情况。相比Groovy(或其他JVM语言),我没有看到同样程度的兴趣,这表明它确实是当今最流行的Java语言,并且我认为它比Java领域中以前的任何东西都更具有动力。然而,如何推广它还有待观察!

3

我已经用Java编程多年,过去两年使用的是Haskell和OCaml。几个月前,我开始在Scala中开发个人项目,这非常棒。它有真正的类型系统和所有Java支持的库。

Java和Scala混合使用的便利性意味着该语言绝对有未来。对于现有的Java项目,采用成本非常低。


2
几个月前我听说了Scala,对于"比Java更好的Java"很感兴趣。Scala解决了Java中繁琐的样板式代码问题,增加了一些函数式编程和并发编程支持。它与Java库有着良好的(虽然不完美)兼容性,因此所有的代码都可以立即使用。同时,也可以在同一个项目中混用Scala和Java甚至其他JVM语言。
我尝试学习Lift(Web框架),但是发现自己还不够聪明。Scala语法在某些地方非常简洁而晦涩(Java则较为冗长),需要一定时间去适应。我写了一些小项目,它们都运行得非常好;但是在当时半成品的Eclipse插件的支持下,大型项目则没有什么乐趣。
就个人而言,我放弃了Scala并转向Clojure,它提供了许多相同的优势,并且(抱歉这里主观了)编程时更加"有趣"。
我的个人结论: Scala拥有许多功能,这增加了学习曲线。它感觉像具有C++复杂度、Java语法和Ruby函数式编程结构的综合体。我认为很难说服行业相信Scala具有显著优势,足以证明在重新工具化和重新培训方面的成本。

我也有同感。我很兴奋学习Scala(它确实有许多令人兴奋的地方),但最终转向Clojure作为我“下一个最好的选择”。 - Brian Knoblauch
很高兴听到我不是唯一一个疯狂的人 - 或者理智的人! ;) - Carl Smotricz

2

不确定这些信息是否有用,但我正在为一家成功并且知名的游戏公司构建一个在线游戏服务器,使用Scala和Project Darkstar。

我们的设计规格可以扩展到50万到1000万用户(感谢Amazon EC2!),而Scala给了我五个方面额外的信心: 1. 我在编译时能够捕捉更多的问题。 2. 很容易使我的游戏数据变为不可变的。 3. 更高级别的代码意味着我不太可能犯一个琐碎的实现错误。 4. 更短、更简单的代码使我更容易审查和找到错误。隐式转换是其中的重要部分。 5. 我写代码越开心(而Scala通常会让我开心),我就能做得越好。

Scala并非万能药,它有很多缺点(即缺乏任何良好的工具支持),但对于我来说,它是我可以用于此目的的最有效的语言。

我唯一的抱怨是,我希望它能编译成C或者大量使用宏的汇编语言,因为JVM的限制经常使我感到恼火(类型擦除、缺乏堆栈类型和按值对象数组)。

我认为Scala还不是很受欢迎,2.8的转换进度严重落后并在社区中造成了分歧,而工具支持也不够完善。但如果你是一个不怕代数类型理论和缺乏自动完成功能的牛仔编程者,那么很难出错。

如果你决定使用它,请给自己带来巨大的好处,购买Odersky的书籍。我曾经试图在没有它的情况下编写Scala代码,几乎无法以“scala方式”做任何事情(尽管对此并没有共识)。


1

我在最近的一次会议(JavaEdge2009)中听说了Scala,每个人似乎都相信Scala是一种很棒的语言。会议的主题是Java的未来不仅仅是一个新的JVM编程语言,而是编程语言是Java的未来。由于JDK 7将内置对动态语言的支持,预言家们说几年后你将用自己的语言进行开发(DSL-领域特定语言)。

从实际角度来看,我已经下载了Scala Eclipse插件,但感到失望。自动导入功能尚未实现,这使我从一个有趣的语言变成了一个实用的语言。虽然可能听起来有点抱怨,但像古代一样需要手动添加导入太过繁琐。


2
你可能会喜欢尝试 IntelliJ IDEA v9 社区版。它是免费的,而且(可选的)Scala 插件(同样免费)比 Eclipse 的好得多。 - oxbow_lakes
是的,Eclipse插件仍在开发中。但这并不是Scala语言的错。只有那么多合格的志愿者... - Carl Smotricz
2
这并不完全是责任分配的问题,而更多的是对语言进行有效使用的要求。 - Pavel Minaev

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接