为什么我要为新项目选择Scala而不是其他语言?它在哪些方面表现优异?
注意
给出了一些很好的答案,遗憾的是我只能将一个标记为已接受的答案。但总的来说,Scala的吸引力似乎来自两个主要方面:
答案 0 :(得分:43)
并发变得越来越重要。我们已经展示了1000个核心处理器,现在的计算机还没有配备能够高度并行运行的GPU吗?
为了利用未来的机器,您的软件必须能够利用所有这些并发性,而Java的当前线程原语在这里无济于事。让我们面对现实,在当前主流范式下的并发编程是疯狂的。
Scala是一种功能语言。因此,它完全包含诸如不变性,for-comprehensions,闭包等概念。它还有4个本机actor库(最后统计)。所有这些都非常适合下一代并发编程。你不能埋头苦干,并假装这些都不存在 - 就像在1995年写一个程序只存储2位数年 - 命令性循环根本就不会切它了!
Scala 2.9将于2011年初发布,它将支持并行操作,例如:
List(1,2,3,4).par map { 2 * _ } //one thread for each input value in the list!
最重要的是,Scala可以完成Java所做的一切,通常使用更清晰的语法。它也比Java更具面向对象(带有原语和静态方法),这一事实常常被错误地认为是面向对象和函数式编程是互斥的。
Scala在哪个领域表现出色?我想那个区域必须是“未来”......
答案 1 :(得分:15)
我对Landei的回答的评论提出了使用Scala的一个有力理由:如果你希望你的项目/团队/公司能够吸引具有前瞻性,才华横溢的工程师,而不是那些设法从CS选修中学习Java的人在Reed或某处,并且在过去的八年里一直在为Visa International的内部人力资源系统编写JSP页面,那么你需要一个更有趣的语言选择。
答案 2 :(得分:11)
Scala在JVM上运行,与Java完全兼容。事实上,就你可以做什么以及如何工作而言,它与Java几乎完全相同,所以你可以使用Scala来做任何事情,Java也是一个不错的选择(特别是:企业环境和跨平台应用程序)。根据{{3}},它是网络服务的理想选择。
至于是什么让它比任何给定任务更好/更差,嗯,我会让Introduction to Scala进行交谈。
答案 3 :(得分:10)
Scala做了很多事情:
Scala开发的良好用例?任何涉及XML,并发应用程序或函数式编程优先的情况(很多情况)。
为什么你更喜欢Scala而不是其他语言?你不一定。我认为对于一个以Java实现的项目来说,它是一个很好的选择,因为它比Java具有一些具体的优势。
一个来自Twitter的人实际上把a slideshow on why they chose Scala放在一起,他和我有很多相同的点(还有一些)。
答案 4 :(得分:10)
Scala显然是JVM上最好的通用武器。 Scala可以完成Java可以做的所有事情,并且Scala几乎总能做得更好(与Java的互操作性非常好),所以恕我直言,没有充分的理由考虑将Java用于新项目。
在某些情况下,动态类型(JRuby,Jython,Groovy)或元编程功能(Clojure)可以为您提供初始优势,但没有任何其他功能可以像Scala那样扩展,并且可以为您提供自由地根据需要混合范式,因为项目越大越好,因为使用Scala可以获得更大的优势。
[更新] 回答问题:
答案 5 :(得分:5)
Scala是JVM上最好的静态类型。
这是Scala高级类型系统的结果,功能的正交性,编写它的方式使它可以通过库无缝扩展,并且易于与现有Java代码集成。
我可以列出这些功能,但如果不懂语言就没有意义。我可以说Scala有正确执行的定义 - 站点差异声明,但是如果没有经历过它会如何衡量?
然而,结果是用Scala编写的代码快速,紧凑,可靠并且指示了问题的范围。这也适用于所有级别,因此Scala 库也是这样。
让我们在这里讨论一些替代方案,以区分清楚。
有非JVM语言,但是关于是否使用JVM语言的决定几乎与关于语言本身的决定完全分开。这是在选择语言之前必须做出的技术决定。因此,我只是将Scala与其他JVM语言进行比较。
大多数其他JVM语言都是动态类型的。虽然在动态类型语言和静态类型语言之间进行选择时需要考虑一些因素,但最终真正有所作为的是个人偏好。否则,只需参考有关动态类型和静态类型语言的许多资源之一。
就JVM上的静态类型语言而言,Scala拥有最先进的类型系统。事实上,据我所知,它几乎是单独的 1 ,它的类型系统受到实际类型系统理论的启发,而不是根据语言实现者的偏好和经验被黑客攻击。
例如,Java没有安全的差异。其他语言与Scala相反,它通过在语言本身中提供“最常见”的数据结构,并使任何人都无法将其他复杂的数据结构编写为库。因此,如果您选择JVM并进行静态类型化,并且您可以灵活选择语言,那么无论该项目是什么,Scala都是该项目的最佳语言。
脚注
答案 6 :(得分:4)
对于我自己的私人项目,我已经采用Scala作为Java的自然继承者(出于其他答案中提到的原因)。但我非常犹豫地建议Scala开发工具(尤其是IDE)适合大规模的商业项目。即IDE重构支持,我认为这对于敏捷开发是强制性的,不符合Java标准,(使用当前的IDEA 10,每晚构建插件)。
此外,我认为公司很难找到Scrum规模的Scala开发团队。另请参阅David Copeland撰写的视频“Sneaking Scala Into Your Organization”:http://days2010.scala-lang.org/node/138/169
目前,我可以想象将较小的Scala模块混合到更大的Java项目中。