为什么Scala比其他语言更具可扩展性?


12

Scala被称为可扩展语言,该功能甚至包括在其名称中

Scala这个名字是“可扩展”和“语言”的缩写,表示它旨在根据用户的需求进行扩展。

在Scala中,“可伸缩”是什么意思?是什么使Scala比Java更具可扩展性?


5
Scala无法按照您的想法进行扩展:您确实应该阅读有关Scala / Java的Twitter开发人员访谈...基本上,每次遇到(实际)可扩展性问题时,他们最终都会删除Scala代码并放入正确的多线程Java代码(正如在此指出的那样,在Java中比在Scala中更容易做到)。Scala非常适合用于原型设计和编写单元测试,以及任何不涉及“真实世界”(TM)数据量的内容。
Tristan St

5
用Java编写正确的多线程代码比使用Scala容易吗?为何如此?
亚伦·诺夫斯特鲁普

@Webinator您是否有采访链接?
亚伦·诺夫斯特鲁普

同意Tristan St的可伸缩性。在并发编程的情况下,Erlang是包中的佼佼者,这是因为它能够在最短的时间内创建进程。您只是无法创建10000+个线程,就无法按照您的想法在SCALA中相互交互。
Ubermensch 2012年

3
@TristanSt。FUD的传播很不错,这绝对不是我从这次采访中获得的基本收获。-“但是对于其他部分,我们只是回到了传统的Java线程模型。从事此工作的工程师John Kalucki刚刚发现,它测试起来更容易一点,而且更具可预测性。花了几分钟的时间将基于actor的代码切换到基于线程的东西。这是一次搜索和替换。因此,如果actor出于某种原因使您失败,也不错。” 惊人的概念-有些东西适合演员模型,有些却不行!
德里克·里兹

Answers:


14

当马丁·奥德斯基(Martin Odersky)谈论scala作为一种可扩展的语言选择时,他的意思是该语言本身适用于:

  • 脚本编写的东西
  • 编写申请
  • 编写怪物“企业”(想要一个更好的词)应用程序

从性能的角度来看,他绝对不是指可伸缩性!

他可以声称scala与快速的肮脏脚本一样适用于大型企业部署,这一事实大致如下:

脚本编写

Scala非常适合脚本编写,因为它的类型推断和功能风格使其既简洁又非常适合切片和切块集合等。

应用领域

Scala非常适合编写应用程序,因为它是一种静态类型检查的语言,具有一些功能丰富的功能,可用于功能样式和命令式样式。Scala与Java兼容,因此您可以利用庞大的库生态系统。

企业部署

与(所谓的)动态类型化(即非类型化)语言相比,Scala可以编译为字节码并在Java虚拟机上运行,​​Java虚拟机是一种性能稳定的稳定系统。同样,它是静态类型的事实意味着在大型代码库上,重构变得更加容易。


是否有任何支持证据“静态类型意味着在大型代码库上重构变得容易得多”?听起来更像是“取决于情况”,然后是事实。我所看到的唯一一件事就是类型化语言绝对可以提供给编译器编写者使用。
德里克·里兹

21

奥德斯基说的是(幻灯片11,http://www.slideshare.net/rawwell/scalaliftoff2009pdf ):

“在其他语言广泛的地方,Scala很深。”

这意味着,可伸缩性是指灵活性和表现力。您可以创建自己的控制结构。例如,参与者框架是一个库,但看起来它使用了语言功能。

这意味着Scala将根据所需的抽象进行扩展,而不必“每秒响应1.000.000个请求”(但是Scala在这里也很强大)。


1
+1确实适合“ SCAlable语言”。它是一种旨在随开发人员需求而增长的语言。
本·詹姆斯

11

实际上,限制Java的可伸缩性的不是JVM,而是编写正确的并发代码的难度。Scala通过对函数式编程和actor模型的支持,使此操作变得更加容易。

当易于并发时,例如在Web服务器中,Java可以非常灵活地扩展(每个请求几乎完全独立)。但是,当涉及到并行执行一个长期运行的任务时,要正确行事可能是一场真正的斗争。


尽管Java不支持函数式编程,但这并不意味着您不能在Java中使用它。这样做可以为您提供几乎相同的可伸缩性,尽管需要更多的精力。一个可以帮助code.google.com/p/lambdaj的
Peter Lawrey,2010年

2
Scala拥有名称的可伸缩性是语言而不是程序。
Daniel C. Sobral


6

与Java相比,这种语言本身不必具有更大的可扩展性,因为您说两种语言都可以产生相同的字节码。

但是Actor模型和函数式编程样式可以增强可伸缩性(简而言之,可以简化正确的并发编程并减少同步需求)。

为了获得更好的见解,请看一下actor模型,并将其与传统的多线程Java应用程序进行比较:

您甚至可以使用Akka框架来创建高度可扩展的Java应用程序,而无需在Scala中进行编码:


actors库是一个很好的示例,说明了Scala是如何可伸缩的,但是此示例与并发无关:actors API 看起来像是具有特殊运算符的本机功能(例如!message-send),但实际上,它仅仅是而已常规方法调用。
本·詹姆斯

Actor模型可以帮助您编写可伸缩软件,而不会带来太多痛苦,也没有太多的并发头痛,不是吗?因此,即使在使用Actor时看不到它,并发也与actor模型有关。Actor模型旨在简化并发计算,所以为什么这个示例与并发无关...我在这里不明白你的意思吗?
阿洛伊斯·科查德

对不起,我的评论措辞不好。llemieng或michael.kebe的答案可以更好地说明这一点。
本·詹姆斯

没问题 !现在,我明白了您的意思,我只是在讲Scala库的可伸缩性,而不是在语言可伸缩性/并发功能本身。谢谢
Alois Cochard 2010年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.