文档章节

[译] 为什么Scala会成为下一个神器?

暗夜在火星
 暗夜在火星
发布于 2017/02/26 12:46
字数 2066
阅读 82
收藏 0
点赞 0
评论 0

 

/**
 * 谨献给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的文章,敬请持续关注!


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

© 著作权归作者所有

共有 人打赏支持
暗夜在火星

暗夜在火星

粉丝 150
博文 150
码字总数 310930
作品 1
广州
程序员
Scala 技术周刊 | 第 24 期

这里有最新的 Scala 社区动态、技术博文。 微信搜索 「scalacool」关注我们,及时获取最新资讯。 深度阅读 Resolve me, Implicitly 依赖注入 Refined types, what are they good for? 让类型...

ScalaCool ⋅ 2017/10/23 ⋅ 0

underscore 笔记

chain value 这个一定要掌握,因为可以链式调用,就像scala那样 each map reduce reduceRight find filter reject contains zip unzip max min 最基础的一堆,不用解释了 where findWhere 用...

m2012 ⋅ 2015/09/19 ⋅ 0

译:如何成为一个通晓多种编程语言的程序员

学习一门新的语言是一种冒险。我总是热衷于尝试新的东西——学习新的语法,了解不同的模式,乃至彻底改变思维方式。不幸的是,许多开发人员对此不以为然,甚至可能是深恶痛绝的——学习新语言...

拉偶有所依 ⋅ 2015/06/10 ⋅ 0

Java之外,选择Scala还是Groovy?

去年早些时候,一篇名为“Scala,Groovy的杀手? ”的博客对Scala和Groovy进行了对比: Scala和Groovy之间的核心区别在于前者是静态类型的。有些人可能争辩说这使得达到脚本化目标变得更加复杂...

JavaGG ⋅ 2009/09/21 ⋅ 2

【外刊IT评论】我的PHP退役了

本文是从 I'm Retiring from PHP 这篇文章翻译而来。 对于我的个人业余项目和未来的编程创收活动,PHP作为我的一种编程语言的选择,已经从此退役了。作出这个决定并不容易,但是对于我热爱的...

小卒过河 ⋅ 2011/06/27 ⋅ 22

你所不知道的路由器:已成新入口!

写在前面的话:也许你不知道的是,丝毫不起眼的路由器正在成为兵家必争的上游入口。本文作者丁丁指出,其实,路由器在极客们的手中,早已超脱了传统 的路由器概念,变成了兼具各种功能的神器...

oschina ⋅ 2013/06/09 ⋅ 92

许式伟:我与Go语言的这十年

2007 年 9 月 20 日,关于设计一门全新语言的讨论正式开始,这门全新的语言,就是后来的 Go。时至今日,Go 语言已经发布到 1.9 版本,走过了整整十年的历程。在这十年间,Go 语言两夺 TIOBE ...

ra681t58cjxsgckj31 ⋅ 2017/12/18 ⋅ 0

Golang 很出色,为何它比 Scala/JVM 更胜一筹?

我是在几个月前学习Golang的,这要感谢@normanmaurer和@MegOnWheels的提议!倒不是因为我想要抹黑Scala和JVM,而是由于它们在将近十年后开始显得很糟糕。 为什么JVM开始显得很糟糕? 我当初开...

达尔文 ⋅ 2016/12/29 ⋅ 81

Scala的虚无与飘渺

本文名字与内容无关。 很多人抱怨Scala相比于Java过于复杂了:大部分使用过Scala的程序员都没有能深刻理解它的类型系统和Scala的函数式编程。Scala的类型系统跟Java和C++很不一样,Scala想把...

开源中国驻成都办事处 ⋅ 2012/09/27 ⋅ 19

Scala 技术周刊 | 第 22 期

这里有最新的 Scala 社区动态、技术博文。 微信搜索 「scalacool」关注我们,及时获取最新资讯。 深度阅读 Status of the Collections Scala 集合重构进展 Akka 系列(十):Akka 集群之 Ak...

ScalaCool ⋅ 2017/09/22 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Jenkins实践3 之脚本

#!/bin/sh# export PROJ_PATH=项目路径# export TOMCAT_PATH=tomcat路径killTomcat(){pid=`ps -ef | grep tomcat | grep java|awk '{print $2}'`echo "tom...

晨猫 ⋅ 今天 ⋅ 0

Spring Bean的生命周期

前言 Spring Bean 的生命周期在整个 Spring 中占有很重要的位置,掌握这些可以加深对 Spring 的理解。 首先看下生命周期图: 再谈生命周期之前有一点需要先明确: Spring 只帮我们管理单例模...

素雷 ⋅ 今天 ⋅ 0

zblog2.3版本的asp系统是否可以超越卢松松博客的流量[图]

最近访问zblog官网,发现zlbog-asp2.3版本已经进入测试阶段了,虽然正式版还没有发布,想必也不久了。那么作为aps纵横江湖十多年的今天,blog2.2版本应该已经成熟了,为什么还要发布这个2.3...

原创小博客 ⋅ 今天 ⋅ 0

聊聊spring cloud的HystrixCircuitBreakerConfiguration

序 本文主要研究一下spring cloud的HystrixCircuitBreakerConfiguration HystrixCircuitBreakerConfiguration spring-cloud-netflix-core-2.0.0.RELEASE-sources.jar!/org/springframework/......

go4it ⋅ 今天 ⋅ 0

二分查找

二分查找,也称折半查找、二分搜索,是一种在有序数组中查找某一特定元素的搜索算法。搜素过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜素过程结束;如果某一特定元素大于...

人觉非常君 ⋅ 今天 ⋅ 0

VS中使用X64汇编

需要注意的是,在X86项目中,可以使用__asm{}来嵌入汇编代码,但是在X64项目中,再也不能使用__asm{}来编写嵌入式汇编程序了,必须使用专门的.asm汇编文件来编写相应的汇编代码,然后在其它地...

simpower ⋅ 今天 ⋅ 0

ThreadPoolExecutor

ThreadPoolExecutor public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, ......

4rnold ⋅ 昨天 ⋅ 0

Java正无穷大、负无穷大以及NaN

问题来源:用Java代码写了一个计算公式,包含除法和对数和取反,在页面上出现了-infinity,不知道这是什么问题,网上找答案才明白意思是负的无穷大。 思考:为什么会出现这种情况呢?这是哪里...

young_chen ⋅ 昨天 ⋅ 0

前台对中文编码,后台解码

前台:encodeURI(sbzt) 后台:String param = URLDecoder.decode(sbzt,"UTF-8");

west_coast ⋅ 昨天 ⋅ 0

实验楼—MySQL基础课程-挑战3实验报告

按照文档要求创建数据库 sudo sercice mysql startwget http://labfile.oss.aliyuncs.com/courses/9/createdb2.sqlvim /home/shiyanlou/createdb2.sql#查看下数据库代码 代码创建了grade......

zhangjin7 ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部