Groovy和Grails vs Scala,为什么Twitter选择Scala?

set*_*tyo 13 ruby java grails groovy scala

我有一个非常基本的问题:为什么Twitter选择Scala而不是Groovy来切换Ruby?我认为使用Groovy对于Rubyist或Javaman来说比Scala更容易.谢谢.

Jas*_*rue 48

虽然只有Twitter可以回答这个问题,但你实际上是在问错误的问题.您应该问自己,哪些业务或技术问题使Scala对Twitter有用.

事实上,如果你读到Twitter在Scala中集成代码,你会发现他们并不只是抛弃了Rails; 他们构建了系统来支持Scala中的部分应用程序,并重构现有代码以与Scala中构建的服务进行通信.

在某些时候,他们的主要技术问题不再是关于Web应用程序本身,而是更多地关注消息和通知.Groovy和Grails不会帮助他们比Rails更好地(或者可能更好)解决这个问题.Scala和其他函数式语言通过最小化可变状态更容易推理高度并发的问题.它为并发问题提供了一个actor模型,可以更容易地将某些类别的应用程序扩展到多个处理器和多个服务器.

这就是为什么你的曲目中应该有多个工具的原因.有些问题并不像存储数据和呈现数据那么简单.使用纯Ruby工具可以获得相当多的东西,但在处理需要在多台机器上进行线程化或分发的问题时,仍然存在一些实际限制.

他们可能很容易选择Erlang甚至F#给予不同的团队成员或动机.但是,当他们的问题并非真正在前端时,另一个网络框架可能会以更大的成本提供很少的好处.


Ant*_*jdr 31

也许你可以在这里找到你的答案:http://www.artima.com/scalazine/articles/twitter_on_scala.html

段落"可靠,高性能的代码"很好地捕获了它:-).

Bill Venners:我很好奇,Ruby人员会想要明确说明:你能详细说明你认为Ruby语言在可靠,高性能代码方面缺乏什么吗?

Steve Jenson:我在职业生涯中发现的一件事就是需要拥有长寿命的流程.与许多脚本语言一样,Ruby很难成为长期流程的环境.但是JVM非常擅长这一点,因为它在过去的十年里已经针对它进行了优化.因此,Scala为编写长寿命服务器提供了基础,而这正是我们现在在Twitter上使用它的主要原因.我们真正喜欢Scala的另一件事是静态类型,这并不痛苦.有时在Ruby中说这样的话会非常好,这里是一个可选的类型注释.这是我们真正希望在这里看到的类型.我们发现在Scala中非常有用,能够指定类型信息.

Robey Pointer:此外,Ruby还没有真正的线程支持.它变得越来越好,但是当我们编写这些服务器时,绿色线程是唯一可用的.绿色线程不使用实际操作系统的内核线程.它们通过定期停止正在执行的操作并检查另一个"线程"是否要运行来模拟线程.因此Ruby在单个核心或处理器中模拟线程.我们希望在没有无限内存的多核服务器上运行.如果您没有良好的线程支持,那么您确实需要多个进程.而且由于Ruby的垃圾收集器不如Java,所以每个进程占用大量内存.我们不能在一台机器上运行很多Ruby守护进程,而不会占用大量内存.而在JVM上运行的东西,我们可以在同一个堆中运行许多线程,并让一个进程占用其操作系统的所有机器内存.

亚历克斯佩恩:我一定想把史蒂夫所说的关于打字的内容归结为家.随着我们的系统不断发展,我们的Ruby系统中的许多逻辑都会复制类型系统,无论是在单元测试中还是在模型上进行验证.我认为它可能只是动态语言中的大型系统的属性,最终你最终会重写你自己的类型系统,而你却做得很糟糕.你正在检查整个地方的空值.有很多调用Ruby的kind_of?方法,它问:"这是一种用户对象吗?因为那是我们所期待的.如果我们没有得到这个,那就会爆炸."当编程语言世界中存在数十年的解决方案时,必须编写所有这些内容是一种耻辱.

  • 但问题是,有人向Scala采取行动,而不是"Groovy".我不认为OP问为什么Ruby被抛弃而不支持Scala. (3认同)