[译] 为什么Scala会成为下一个神器?
[译] 为什么Scala会成为下一个神器?
暗夜在火星 发表于10个月前
[译] 为什么Scala会成为下一个神器?
  • 发表于 10个月前
  • 阅读 70
  • 收藏 0
  • 点赞 0
  • 评论 0

腾讯云 新注册用户 域名抢购1元起>>>   

摘要: 来自印度朋友Madusudanan.B.N的系列文章,适合于Scala初学者,以及感兴趣的同学学习。 转自www.itran.cc

 

/**
 * 谨献给YoYo
 *
 * 原文出处:https://madusudanan.com/blog/why-scala-will-be-the-next-big-thing/
 * @author dogstar.huang <chanzonghuang@gmail.com> 2017-02-22
 */

为什么要学Scala?

这不是一篇关于Scala狂热的文章,只是我最近正在学Scala,以下是关于这门语言我觉得值得分享的一些东西。

Scala是一门强大、不容易学习的语言。首先,我会列出好的优点,这一点不通过与其他语言来比较是体现不出来的,然后我还会说出它的缺点以及如何避免他们。这里不会有任何代码,但会有一些好的视频/访谈,你可以用来学习Scala代码的细微区别。

任何编程语言都不是银弹,对于你的工作,什么是最好的,取决于你的决定。

PS:你可以免费使用这篇文章来向你的BOSS兜售Scala。

头条!!

如果让我重新选择一门今天会用到的语言,它将会是Scala,而不会是Java。 -- 詹姆斯·高斯林,Java创始人

如果在2003年有人把《Scala编程》这本书介绍给了我,很可能我就不会创造Groovy了。 -- James Strachan,Groovy创始人

没有其他的语言能像Scala那样,在JVM上作为“Java的代替品”,并且Scala背后的势头是不容置疑的。 -- Charles Nutter,JRuby共同创始人

好了,这些都是一些大人物在谈论Scala。让我们开始吧。

一点点历史

Scala是由Martin OderskyjavacJava泛型(Java Generics)的共同创始人,在2001年设计的。

Scala的主要目标是成为多范式,专注于JVM以及克服其他语言留下的问题。

Scala的演变是一份简短的报告,感兴趣的同学可以看一下。

Scala是个好东西!!

  • 多范式
  • 在JVM上运行
  • 静态类型
  • 构建并发/并行计算
  • 支持与生态环境

多范式

Scala正交地结合了函数式编程和面向对象编程,到目前为止,没有其他语言能做得到,或者至少没有达到在JVM上Scala这种级别。从技术上来讲,面向对象编程并不是一种范式,

在这方面,它比Haskell要好。

函数式编程纯粹主义者可能不同意这种说法,并且会说纯函数式编程通常会更好,不能很好地和OOP混合在一起。

好吧,那是不对的。为什么要混合OOP和FP? -- 因为现实世界就是像那样的。某些方面可以很好地通过永恒的关系来建模,有些则需要生命周期和状态。Scala在这两者之间提供了完美的平衡。

但是为什么在第一位置上使用函数式编程?以下是Martin Odersky关于这一点的精彩演讲。

在JVM上运行

Scala被设计运行在JVM平台上。尽管出于某些原因某些人对JVM吵吵嚷嚷,但JVM是一个非常强大的平台,能让开发人员从中获益。让Scala在它自己的环境上运行可能需要重新造轮子。Scala的设计者在这方面做了一个很好的决定。这样有几个好处,最主要的是可以直接使用Java的类库以及其他特性、丰富的接口而无须做过多样板工作。

这是Scala密切的竞争对手OCaml所失手的地方。尽管有所好转,仍然有很多类库是缺失的。

静态类型

是的,Scala是静态类型。为什么这一点也作为一个优点呢?我鼓励你去阅读这篇解释静态类型的好处的文章。

Clojure是一种出现在JVM平台上更新的语言,但它是动态类型的,而这给Scala带来了优势。这里有一个Typed Closure,我还没试过,所以对此暂不发表评论。直到他们和Scala一样。

构建并发/并行计算

随着摩尔定律越来越近,并发的需求比以往都要大。今天的公司正在寻求向外扩展(scaling out)而不是向上扩展(scaling up),并且分布式系统越来越受到重视。考虑到这些事情,Scala被构建用于在一个更基础的级别使用函数式编程来处理并发。

支持与生态环境

Scala已经获得了外部的支持。包括Linkedin、Twitter、Coursera、Foursquare等公司都已经移植了他们大量的代码库到Scala。这里有一个商业公司叫typesage,Martin Odersky是其中一份子,并且 提供关于使用Scala构建反应平台方面的咨询。

编辑按:Typesafe现在是lightend

更全面的列表可在这里查看。

很多开源项目,例如Apache SparkApache Kafka,对于其核心部分也使用了Scala。就连相当出名的Play框架也是使用Scala来开发的。

不像某些语言,这里我就不点名了,Scala是被创建出来的,并且有由一群相当厉害的人物组成的生态圈。尽管使用Scala来做一些个人爱好的项目会很有趣,但当你是在为你的产品/业务而不是个人业余项目寻找一个可以构建或者依赖的平台时,这真的区别很大。

缺点!!

  • 非纯函数
  • 较陡的学习曲线
  • 尚未流行 -- 真的吗?

非纯函数

如果你熟悉函数式编程的世界,那么你可以找到大量的人在争论Scala不是纯函数并且在做某些函数式编程构造时非常丑陋。这并不是完全对的,虽然Scala不是一门纯函数式语言,但它也并没有打算说不是,它有适合现实世界实现的混合构造。我发现编程构造的比较有点太学术性,而不是基于现实世界的。

但是,如果你正在寻找一门纯函数语言,那么你可能要到别处找找了。

较陡的学习曲线

对于任何新的语言都一样,但我承认对于Scala学习曲线更为陡峭。幸运的是,情况有所好转,在下面我分别列出了很多资源可以用于克服这一点。

尚未流行 -- 真的吗?

在提及了很多鼎鼎的大名后,对于流行度被列表一个缺点,你可能会觉得很惊讶。是的,对于新技术,软件行业适应很慢,主要是因为公司对于迁移的费用感到相当不自在,而开发人员不作调整害怕失去他们的工作。Scala还没有像Java和其他语言那样流行。还需要一些时间,但它绝对不是一种原型语言(prototype language),任务关键系统(mission critical system)已经使用Scala来开发了。

但正如前面提及到的,它已经构建在JVM上,所以它可以无缝地操作Java的类库。

Scala是唯一 一门可以支持静态类型、多范式(对象、函数式和命令式)并运行在JVM上的语言。

资源

  • Coursera有一个相当好的教程,由Martin他本人亲自授课。
  • 另一个针对使用Akka进行反应式编程的优秀教程(Play框架背后的并行库)。
  • 一个非常友好的Scala向导
  • 两个很好的访谈,这里这里

如果你找到了真的很好的资源,请告诉我。

这里还有一些其他的,希望能帮助到你。

参考

更多关于Scala的文章,敬请持续关注!


------------------------

共有 人打赏支持
暗夜在火星
粉丝 143
博文 141
码字总数 302694
作品 1
×
暗夜在火星
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: