当前位置:  开发笔记 > 编程语言 > 正文

Scala是否比其他JVM语言更好地扩展?

如何解决《Scala是否比其他JVM语言更好地扩展?》经验,为你挑选了4个好方法。

这是目前我所知道的唯一方式.理解它Scala使用Java虚拟机.我以为Jruby也是.Twitter将其中间件转换为Scala.他们可以做同样的事情并使用Jruby吗?

他们是否可以从Jruby开始,而不是因为他们的缩放问题导致他们首先从Ruby迁移到Scala?我不明白Jruby是什么?我假设因为Jruby可以使用Java,它会缩放到Ruby不会的地方.

在这种情况下,这一切都归结为静态与动态类型吗?



1> Daniel C. So..:

Scala是"可扩展的",因为图书馆可以通过某种方式改进语言,使扩展看起来像是语言的一部分.这就是为什么演员看起来像语言的一部分,或者为什么BigInt看起来像语言的一部分.

这也适用于大多数其他JVM语言.它不适用于Java,因为它对运算符的基本类型(Int,Boolean等)有特殊处理,繁琐的语法清楚地说明了语言中构建的内容以及库是什么等.

现在,Scala比JVM上的动态语言更具性能,因为JVM不支持它们.JVM上的动态语言必须采用反射,这非常慢.


JRuby的设计者受到他们正在实现动态类型的Ruby的限制.Scala是静态类型的.静态类型意味着每个标识符和表达式的类型在编译时是已知的,使计算机能够为类创建固定的调度或动态调度方法.对于动态语言 - 在JVM上! - 在编译时不知道类型的地方,每个方法调用的代码必须使用反射来搜索对象上的方法名称,并且只有它们才能调用它.顺便说一句,这与动态调度不同.
对于计算机编程,我们已经有一个虚构的词:"performant"

2> chaos..:

不,不是真的.并不是说JVM在某种程度上是神奇的,并且通过它的神奇力量使事物变得规模化; Scala作为一种语言,其架构旨在帮助人们编写可扩展的系统.它位于JVM之上几乎是偶然的.


把它们打在脸上.
你是对的,我说的恰恰相反:一种语言的结构会影响人们用它表达的概念以及它们如何表达它们,就像在自然语言符号学中一样.编译器/解释器很重要,不要误会我的意思,但它们不是Scala拥有它所具有的属性的原因,或者在JVM顶层构建的每个Tom-Dick-and-Harry语言都是世界闻名的可扩展性的典范.

3> Skade..:

我真的不认为语言是这里最大的问题.Twitter变得非常快,总是会导致代码混乱.如果你进行重写,最好选择另一种语言 - 禁止你再次构建自己的错误和/或"重用某些部分".此外,Ruby并不是真正意味着Twitter后端所做的那种繁重的数据处理.前端仍然是Ruby,所以他们仍然使用它.



4> Erik Engbrec..:

你必须分出不同的缩放含义:

    扩展可以通过硬件按比例增加处理的每秒请求数量

    在扩展代码库方面进行扩展,而不会成为纠结的混乱

Scala在第一点上有所帮助,因为它编译为与Java非常相似的Java字节码,因此通常具有与Java相同的性能.我说"通常",因为Scala有些情况下惯用Scala会导致大量的拳击发生在惯用Java不会发生的情况下(这将在Scala 2.8中更改).

性能当然与缩放不同.用JRuby编写的等效代码也可以扩展,但是线的斜率会更陡峭 - 你需要更多的硬件来处理相同数量的请求,但是线的形状是相同的.但是从更实际的角度表现会有帮助,因为你很少能相对于规模在完全线性的方式来增加核心或特别是服务器,并具有更好的性能会降低上,你必须添加容量的速度.

Scala有助于第二点,因为它有一个富有表现力的编译时强制类型系统,并且它提供了许多其他方法来管理代码的复杂性,例如mixins.你可以用任何语言编写意大利面条的代码,但Scala编译器会告诉你一些面条被打破时,同时使用JRuby你必须仅仅依靠测试.我个人发现,对我而言,Python在大约1000个密切相关的LOC上发生故障,而且我必须重构以大幅减少LOC或使结构更加模块化.当然,无论你的语言是什么,这种重构都是一个好主意,但有时复杂性是固有的.在任何语言中处理大量紧密耦合的LOC并不容易,但在Scala中比在Python中更容易,我认为类比也扩展到Ruby/JRuby.

推荐阅读
手机用户2502851955
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有