JVM 语言的兴衰史

不管什么时候,都会有一些预测 Java 覆灭的帖子出现。但有趣的是,这些帖子从不写预言成真的日期。说实话,它们说的都算正确,因为这是每一种语言的最终命运都是:覆灭湮没,准确地说是越来越少地被利用到新项目中。问题是:最后谁会取代它们呢?

上周我们在 InfoQ 一篇同样类型的文章。至少,这篇文章说出来这个语言可能的替代者 Kotlin。这让我对 JVM 的语言现状和趋势有了许多思考:注意,语言的趋势与每个语言的技术优点和缺点无关。

我于 2001 年年底开始做 Java 开发,当时,Java 是真的很酷。每一个新开发者都想使用所谓的新技术:无论是 .NET 还是 Java,而有经验一些的开发者使用的是 COBOL。我在学校学习了 C 和 C++,所以 Java 内存管理对于我来说非常简单。我对 Java 很满意,但并不是每个人都这么认为。

Groovy 诞生于 2003 年。但我不记得我是什么时候开始学习它的。而实际上:使用它后我不再需要一门脚本语言了。在具有多个开发团队并长时间开发企业级应用程序的背景之下,静态类型相比动态类型拥有巨大优势。尤其在进行产品测试以检查类型系统时。我唯一需要创建脚本的时候,是作为 WebSphere 管理员时:选择 Python 还是 TCL。

一年之后,Scala在2004年被我接受。 我不记得是什么时候以及是怎样知道Scala的,但那时候确实是很晚了。与Groovy相反,我决定试试它。主要的理由是我长期以来对创建“更好”的代码(更好的可读性和可维护性)感兴趣。Scala是静态类型的,它更像我正在寻找的东西。我报了Coursera课程Scala中的函数式编程原理。它有三个主要的影响:

  • 它让我质疑我写Java代码的方式。 例如,为什么当我设计类时要自动生成getter和setter方法?

  • 对大多数开发者来说,我觉得Scala很容易写出缺乏可读性的的代码——包括我。

  • 我开始寻找其他替代语言。

在 Groovy 和 Scala 之后,第二代(如果你把 Java 也算做第一代的话,则是第三代)JVM 语言包括:

  • JetBrains Kotlin

  • Red Hat Ceylon

  • Eclipse eXtend

大致浏览一遍后,我确信他们没有太多的吸引力,不值得我投入时间。

几年前,我决定自学基本的 Android 开发,以便能够了解移动开发者的开发环境。好家伙,即使有多年开发 Java EE 和 Spring 应用程序的经验,但它还真给我一个惊喜了 - 还不是愉快的那种。这就像回到过去十年前那样的开发体验,Android API 非常低级,更别说在本地测试应用程序。经过快速的搜索相关信息,我发现 Kotlin 在很多地方被提到,所以最后决定试一试。我立即爱上 Kotlin 了,得亏它的扩展功能,我可以将现有的垃圾 API 改进得更好,甚至更优雅。我开始更多的挖掘这门语言,并开始在服务器端项目中使用 Kotlin。然后,Spring 框架宣布了与 Kotlin 的整合。然后在 Google I/O 大会上,Google 也宣布在 Android 开发中官方支持 Kotlin。

这篇文章基于我个人的体验和观点。如果你更喜欢阅读你赞同的帖子,请随时停止阅读。

除了我自己的经验,这些语言的现状是如何呢? 我在Google Trends中进行了一个快速搜索。

有几件有趣的事情值得关注:

  • Google已经识别到诸如Scala、Groovy和Kotlin作为"编程语言"的搜索关键词,而没有把Ceylon和eXtend作为关键词。对于Ceylon来说,我只能假装它是因为Ceylon是一个受欢迎的地方。对于eXtend,恐怕是因为大家很少在Google中搜索它。

  • Scala是迄今为止最受欢迎的,其次是Groovy和Kotlin。我没有关于Scala的真实线路图。

  • 五月份的Kotlin搜索巅峰是与谷歌在Google I/O上的支持公告相关的。

  • 大多数搜索Scala和Kotlin的数据来自中国,考虑到地理位置上的平衡,Groovy更胜一筹。

  • Scala搜索与术语“Spark”强烈相关,Kotlin搜索与术语“Android”相关。

进一步挖掘可能会发现有趣的事实:

  • xTend没有死,因为它从未活过。从来没有读过任何关于它的帖子。从来没有听过一个关于它的峰会。

  • 2017年,红帽公司将Ceylon捐赠给Eclipse基金会,创建了Eclipse Ceylon。将软件赠送给基金会的私人行为可能会被不同的方式解释。在这种情况下,尽管围绕这一举措进行了可靠的谈判,但这并不意味着Ceylon的未来。

  • 2015年,Pivotal停止赞助Groovy,并转移到Apache基金会。虽然我相信Groovy有足够的支持基础,并且在JVM脚本上也是独一无二的,但这并不是一个好兆头。这与Groovy核心创建者的提交频率相关:它们的提交次数急剧减少 - 到某些停止点。

  • 有趣的是,Scala和Kotlin最近都入侵了其他领域,并将其翻译成JavaScript并编译成原生代码。

  • 在Java中,JEP 286是使用类型推断来增强语言的提议,这是Scala和Kotlin已经提供的功能。然而,它仅限于局部变量。

  • 有意思的是,通过保留语言的一小部分,来努力提升Scala编译时间。然后提出问题,为什么要保持Scala,如果你抛弃它强大的功能(如宏)?

我并不擅长预测,但这是我的一些展望:

1、Groovy拥有自己的强项——脚本,这就留下Java、Scala和Kotlin在服务器端的JVM上为纯应用程序开发而争夺占用率。

2、Scala也开创了自己的领域。Scala开发人员通常认为这种语言优于Java(或Kotlin),而不会转移到另一种语言。然而,由于Spring和Google的公告,Kotlin可能会成为对Java不满意的开发人员的Scala的替代。

3、Kotlin已在Android战场上获胜。Scala过去忽视了这个领域,并且不会在将来中继续投入,因此Kotlin在这场比赛中已经遥遥领先了。

4、Kotlin在手机上的崛起不是一个预期中的举动,而是一个不错的意想不到的惊喜。JetBrains一旦注意到这个趋势就把它用作了前进的路标。

5、Kotlin与Java的互操作性是杀手级别的功能,这可能会说服管理者将遗留项目迁移到Kotlin上然后开始新项目。正如Java的不间断的后向兼容性一样。

亲爱的读者,尽管(特别是)你不同意上述的观点,但我将对你的意见非常感兴趣。只要你有礼貌地提供事实,并证实你的观点即可。

1、具有1-5工作经验的,面对目前流行的技术不知从何下手,需要突破技术瓶颈的可以加群。

2、在公司待久了,过得很安逸,但跳槽时面试碰壁。需要在短时间内进修、跳槽拿高薪的可以加群。

3、如果没有工作经验,但基础非常扎实,对java工作机制,常用设计思想,常用java开发框架掌握熟练的,可以加群。

4、觉得自己很牛B,一般需求都能搞定。但是所学的知识点没有系统化,很难在技术领域继续突破的可以加群。

5.群号:651013434 高级开发

6.阿里Java高级大牛直播讲解知识点,分享知识,多年工作经验的梳理和总结,带着大家全面、科学地建立自己的技术体系和技术认知。

相关推荐