Scala兴衰史:暂时的没落或许是一个新的开始

5年前,Scala 似乎曾要成为编程语言中下一个佼佼者,因为它能够优雅得使用面向对象编程范式进行函数编程。

现如今,随着像 LinkedIn 和 Yammer 这些公司的弃用,Scala 的光环正逐渐黯淡。

2012 年的 TIOBE 编程语言受欢迎度排行榜上,Scala 排名第 13 位;2016 年 8 月竟下降到第 32 位,现在只有不到 6% 的编程社区在使用它。

不祥的预兆:Lightbend,Scala 的母公司,在先前的 Scala 版本上发布了一款使用 Java API 的新框架。

有趣的是,作为一家领先的软件产品工程公司的 CTO,我见了很多软件开发主管,我知道的至少有两个人,曾经在使用了 Scala 一年多后,便痛苦的决定放弃使用它。这是为什么呢?

最初是什么给了 Scala 如此高的知名度呢,而如今又是什么导致了它的衰退呢?

有没有一些案例,能够证明使用 Scala 仍然是最好的选择呢?

想要知道 Scala 最初是如何火起来的,就要先了解现代编程范式的演变。首先,程序化编程,程序被视为是应该被一个接一个执行的一系列声明。然后是面向对象编程,知道如何执行对象上的操作,以及如何与相互交流,从而完成任务。

相比之下,函数式编程将一个程序作为数学函数来评估,以生成一个结果值。该函数可以调用嵌套函数,而嵌套函数又可以调用更多的嵌套函数。一个嵌套函数求出一个结果。然后,该结果会被传递给封闭的函数,这是使用嵌套函数值来计算它自己的返回值。为了使函数能够方便传递数据,并且从其他函数中,函数编程通常作为一个集合,以最可能的方式定义数据结构。它们还允许函数间传递,就像它们是数据参数一样。在这个参数内的一个例子是不允许产生任何副作用,像修改一个全局变量保持状态信息。相反,它只允许接收参数,并且为了生成其返回值,会对它们进行一些操作。执行一个函数程序包括评估最外层的功能,这反过来又导致了对所有的嵌套函数评估,而最基本的功能递归向下是没有嵌套功能的。

为什么函数式编程如此重要?

· 清晰:没有副作用的编程能创建出更容易有规律可循的代码 - 一个函数通过输入和输出完全被描述出来。一个函数今天可以生成正确答案,明天也会生成正确答案。这样创建的代码更容易调试,测试和重用。

· 简洁:在函数语言中,数据通过通用集合数据类型从嵌套函数隐式传递到其父函数。

· 高效:由于函数没有副作用,运算可以重新排序或并行执行,以优化其性能,或者,如果它们的结果没有被其他任何函数使用,则可以完全跳过。

函数编程语言已经存在了几十年,开始于 John McCarthy 的 LISP 语言,这是20世纪50年代在麻省理工学院创建的。然而,这些总是被视为细分语言,感兴趣的主要是院士和理论家。Scala 开始还作为一个学术项目,2001年由 Martin Odersky 创建于 Ecole Polytechnique Federale de Lausanne。随之,Scala 的设计者做出了几个重要决定,将 Scala 定位为函数编程到主流的突破性语言。

· Scala 代码在 Java 虚拟机(JVM)中运行。这意味着它可以轻松部署在任何运行 Java(大约85%的PC)的机器上。还意味着,Scala 代码在理论上可以与 Java 代码相互操作,为 Java 开发团队提供了一个桥梁,以轻松进入 Scala。

· Scala 在语法上和 Java 相似,并且像 Java 一样,在编译时执行类型检查而不是在运行时,从而消除了由类型不兼容而导致运行错误的可能性。这些相似之处减少了 Java 程序员的初始学**曲线。

· Scala 内置对模式匹配的支持,可以基于值模式来匹配任意数据类型,以便于对每个匹配模式执行不同的操作。

· Scala 将 Akka 作为一个标准库,支持丰富的并发模型。这使得程序员很容易的就可以实现流数据的复杂创建或处理。

看到这里,也难怪 Scala 当时那么受欢迎,被视为引领函数编程的主流语言。然而用 William H. Calvin 的话来说,“你总是可以通过背后的箭头发现先驱者。”毫无疑问,Scala 便是函数编程得以普及的先驱。那么,为什么现在的趋势又转向 Scala 了呢,今天它的开发者们是又如何到了稳步缩减的地步?

· Java 编程语言引入了函数式编程结构,始于2014年初发布的 Java 8。Scala 和 Java 支持的函数编程方式有着微妙的差别,有争议的是,Scala 的方法更胜一筹。但是,作为优秀的函数编程语言,Java 已经超越了Scala,因为程序员们对 Java 已经很了解了。这让人联想到 Adobe Flex 和 Microsoft Silverlight,它在 Web UI 程序员中有相当大的跟风性,直到发布了 HTML 5,HTML 5 提供了足够的 Web UI 特性,使其成为主流技术。

· Scala 是一门很难掌握的语言,因为它的规则是基于数学类型理论下的,只有最具学术和数学天分的程序员才能够完全理解。此外,Scala 的很多语言特性,包括隐性和宏,可能导致程序控制意外流到代码库的其他部分,这使得大多数程序员难以跟踪或调试其代码。一个能够领会这一切的优秀程序员,使用 Scala 会比使用 Java 更高效,但是一个普通程序员的生产力,从功能实现上来看,效率则会相反。这不仅仅是由于学**曲线的短期下降 — 这是一些开发团队使用 Scala 一整年后的观察结果。

· 不像 Java,Scala有一个灵活的语法,通常会提供很多方法来达到相同的结果。除了让 Scala 为更多的程序员所用外,Scala 社区似乎花了很多时间来讨论,这个几个功能解决方案哪个是正确的。这些争论聚集了很高的热度,并且防止出现在其他更具限制性的语言(如Java)中存在的尝试和真正的实现模式。

· Scala 还没有做好保持兼容性的工作,无论是早期版本的 Scala 还是 Java。

鉴于这些问题,Scala 很可能永远不会演变成 Java 这样的主流编程语言,但仍然会有一些特殊案例,选择 Scala 这种编程语言才是最合适的:

· 大数据处理:Scala 的优势非常适合大数据编程模型,其中任务采用了不可变集合作为输入,使用 map 和 reduce 处理转换集合,并生成新的结果集合。对于 Spark 等大数据工具,使用 Scala 的优势是压倒性的,因为一个程序的 Scala 版本通常比等效的 Java 程序缩短 5 到 10 倍。

· 创建特定领域的语言:通过为用户提供可用于编写脚本的特定领域的语言(DSL),可以很好的解决许多问题。例如,假设你的用户要求用一个工具,使他们能够安排和运行自动化质量检测。由于你不能预测所有需要运行的测试组合,因此你需要为他们提供一种脚本语言,以便于他们为任何场景定义这些测试的顺序和位置。由于其模式匹配,语法灵活,操作符重载等特性,使 Scala 能够独特地适用于 DSLs 开发。

总结

Scala 在函数编程普及的过程中起到了关键性的催化剂作用,它对 Java 中的函数式编程设计产生了很大的影响。Scala 可能永远不会成为下一个巨星编程语言,但是,在未来几年内,它将成为大数据编程等细分问题领域的首选语言。

英文原文:The Rise and Fall of Scala

译文作者:DevStore-糖果果

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,294评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,493评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,790评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,595评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,718评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,906评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,053评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,797评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,250评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,570评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,711评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,388评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,018评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,796评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,023评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,461评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,595评论 2 350

推荐阅读更多精彩内容