jvm与非jvm语言优劣

时不时有一篇文章预测Java语言的消亡。 有趣的是,他们都没有写日期。 但老实说,它们可能都是真实的。 这是每种语言的命运:消失于遗忘-或更确切地说,越来越少地用于新项目。 问题是什么将取代它们?

上周在InfoQ上看到了另一篇这样的文章。 至少,这个告诉了一个可能的替代者,Kotlin。 这让我开始思考JVM语言的状态和趋势。 请注意,趋势与每种语言的技术优缺点无关。

我从2001年底开始使用Java进行开发。那时,Java非常酷。 每个年青的开发人员都想开发所谓的新技术:.Net或Java,因为年长的开发人员被Cobol所困扰。 我在学校学习过C和C ++,使用Java进行内存管理非常容易。 我对Java感到满意...但并非所有人都满意。

Groovy于2003年问世。我不记得是什么时候知道它的。 我只是忽略了它:那时我不需要脚本语言。 在与许多开发人员组成的团队一起开发使用寿命长的企业级应用程序的情况下,静态类型比动态类型具有巨大的优势。 必须创建测试来检查类型系统是一个净损失。 我唯一需要创建脚本的时间是作为WebSphere管理员:在Python和TCL之间进行选择。

一年后的2004年, Scala被接受。我不记得何时,如何得知它的,但是那是很晚了。 但是与Groovy相反,我决定尝试一下。 主要原因是我长期以来对创建“更好的”代码的兴趣-阅读起来更具可读性和可维护性。 Scala是静态类型的,这更多的是我在寻找的东西。 我遵循了Scala的Coursera课程《函数编程原理》 。 它具有三个主要结果:

  • 它质疑我编写Java代码的方式。 例如,为什么在设计类时自动生成getter和setter方法?
  • 我认为Scala使得大多数开发人员(包括我自己)编写不易读的代码变得太容易了
  • 我开始寻找其他替代语言

之后Groovy和斯卡拉来到第二代(3 ,如果算上Java作为第一)JVM语言,其中包括:

  • 捷豹Kotlin
  • 锡兰红帽酒店
  • 和Eclipse Xtend

随便看了他们一眼,我就确信他们没有太多的吸引力,也不值得花我的时间。

几年前,我决定自学基本的Android,以了解移动开发人员的开发环境。 好家伙! 经过多年的Java EE和Spring应用程序开发,这是一个惊喜-也不是一件令人愉快的事情。 就像过去十年被倒退了一样。 Android API的级别太低了......更不用说在本地测试应用程序了。 快速浏览后,我发现很多地方都提到了Kotlin,最后决定尝试一下。 我立即坠入爱河:有了Kotlin,借助扩展功能,我可以将现有的废话API改进为更好甚至更好的东西。 我进一步研究了该语言,并开始将Kotlin用于服务器端项目。 然后,Spring框架宣布了Kotlin的集成。 在Google I / O上,Google宣布在Android上支持Kotlin。

这篇文章是关于我个人的经历和由此形成的观点。 如果您更喜欢只阅读您同意的帖子,请随时停止阅读这一点。

除了我自己的经验之外,这些语言的当前状态如何? 我在Google趋势上进行了快速搜索 。

有一些有趣的事情要注意:

  • 谷歌已经认识到搜索词 “编程语言”为斯卡拉,Groovy和Kotlin,而不是锡兰和扩展。 对于锡兰,我只能假设是因为锡兰是一个受欢迎的地方。 对于eXtend,恐怕Google搜索量不足。
  • 到目前为止,Scala最受欢迎,其次是Groovy和Kotlin。 我没有关于规模的真正线索。
  • 五月份的Kotlin高峰与Google在Google I / O上的支持声明有关。
  • 对于Scala和Kotlin的大多数搜索都来自中国,Groovy在地理位置方面更为平衡。
  • Scala搜索与术语“ Spark”密切相关,Kotlin搜索与术语“ Android”相关。

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

  • xTend尚未死,因为它从未存在过。 永远不要阅读任何有关它的文章。 也从未听过会议演讲。
  • 2017年,红帽将Ceylon交给了Eclipse Foundation,创建了Eclipse Ceylon 。 向基金会捐赠软件的私人参与者可能会以不同的方式进行解释。 在这种情况下,尽管围绕此举进行了令人放心的谈判,但这对锡兰的未来并不是一个好兆头。
  • 在2015年,Pivotal停止赞助Groovy,并将其转移到Apache基金会。 尽管我相信Groovy具有足够广泛的支持基础,并且在JVM上具有独特的优势-脚本编写,但这也不是一个好兆头。 这与核心Groovy 提交者的提交频率相关:它们的提交数量急剧减少-甚至停止了一些。
  • 有趣的是,Scala和Kotlin最近都入侵了其他领域,转而使用JavaScript并编译为原生语言。
  • 在Java中, JEP 286是通过类型推断来增强语言的建议,Scala和Kotlin已经提供了此功能。 但是,它仅限于局部变量。
  • 有趣的是,人们正在努力通过仅保留一部分语言来缩短Scala编译时间 。 这就提出了一个问题:如果放弃Scala的强大功能(例如宏),为什么还要保留它呢?

我的预测并不理想,但这里是我的2美分:

  1. Groovy有其自己的细分市场-脚本编写,它使Java,Scala和Kotlin争夺服务器端JVM上的纯应用程序开发空间。
  2. Scala还雕刻了自己的空间。 Scala开发人员通常认为该语言优于Java(或Kotlin),因此不会迁移到另一种语言。 但是,由于Spring和Google的宣布,当开发人员对Java感到不满意时,Kotlin可能会取代Scala作为语言开发人员。
  3. Kotlin赢得了Android之战。 由于Kotlin在游戏中遥遥领先,Scala过去忽略了这一领域,并且将来不会投资。
  4. Kotlin在移动设备上的崛起并不是有意的举动,而是一个令人惊喜的意外惊喜。 但是,JetBrains在注意到趋势后立即将其用作前进的方向。
  5. Kotlin与Java的互操作性是杀手级功能,可以说服经理人将遗留项目迁移到Kotlin或启动新项目。 就像对Java的不间断的向后兼容性一样。

亲爱的读者,即使您不同意以上内容,我也会非常感兴趣您的意见,甚至(尤其是?)。 请保持礼貌,并在可以证明观点时提供事实。

翻译自: https://blog.frankel.ch/rise-fall-jvm-languages/

jvm与非jvm语言优劣

jvm与非jvm语言优劣_JVM语言的兴衰相关推荐

  1. jvm与非jvm语言优劣_都灵JVM编程语言:使用ANTLR构建高级词法分析器

    jvm与非jvm语言优劣 正如我在上一篇文章中所写的那样,我最近开始研究一种名为Turin的新编程语言. 可以在GitHub上找到适用于languag初始版本的编译器. 我目前正在改善语言,并正在开发 ...

  2. C语言已知二进制码求循环码,循环码系统与非系统编码的C语言实现

    循环码系统与非系统编码的C语言实现: #include"stdio.h" #include #defineN10 //系统编码实现 voidX(int g[N],int c[N], ...

  3. 《编写高质量代码:改善Objective-C程序的61个建议》——建议8:C语言与Objective-C语言的关系是充分而非必要条件...

    本节书摘来自华章出版社<编写高质量代码:改善Objective-C程序的61个建议>一 书中的第2章,作者:刘一道,更多章节内容可以访问云栖社区"华章计算机"公众号查看 ...

  4. QT学习:使用JSON/XML等非ts文件实现多语言国际化

    注意:如果不是CSDN网站显示本篇文章,请于底部点击"阅读原文"来阅读本篇文章! QT学习:使用JSON/XML等非ts文件实现多语言国际化 解析Json 重载translate ...

  5. Jvm 系列(二):Jvm 内存结构

    所有的Java开发人员可能会遇到这样的困惑?我该为堆内存设置多大空间呢?OutOfMemoryError的异常到底涉及到运行时数据的哪块区域?该怎么解决呢?其实如果你经常解决服务器性能问题,那么这些问 ...

  6. jvm系列(二):JVM内存结构

    所有的Java开发人员可能会遇到这样的困惑?我该为堆内存设置多大空间呢?OutOfMemoryError的异常到底涉及到运行时数据的哪块区域?该怎么解决呢?其实如果你经常解决服务器性能问题,那么这些问 ...

  7. 【JVM】第二章 JVM类加载、JVM对象

    第二章 JVM类加载.JVM对象 文章目录 第二章 JVM类加载.JVM对象 一.JVM类加载 1.介绍 2.类加载器 3.类加载机制 4.类加载过程 二.JVM对象 1.对象的内存布局 2.对象的访 ...

  8. JVM架构、JVM垃圾回收机制、垃圾回收算法、垃圾回收器、JMM(内存模型)

    0 JVM和Java的关系 JDK = JRE + Java开发工具(java,javac,javadoc,javap-) JRE = JVM + Java核心类库 即: JDK = JVM + Ja ...

  9. 一文读懂JVM虚拟机:JVM虚拟机的内存管理(万字详解)

    JVM虚拟机的内存管理 文章目录 JVM虚拟机的内存管理 JVM与操作系统 Java虚拟机规范和 Java 语言规范的关系 java虚拟机的内存管理 JVM整体架构 一.PC 程序计数器 二.虚拟机栈 ...

最新文章

  1. Android 多线程下载 显示进度 速度
  2. iOS网络传输Delegate不被触发的本质原因
  3. linux 子目录 挂载,linux – NFS4 – 挂载多个子目录
  4. [LOJ#6053]简单的函数 题解
  5. java 枚举 大小_Java枚举入门
  6. ieee期刊的科技写作思路曹文平_科学网—怎样向IEEE期刊投稿* - 吴雄君的博文
  7. Python制作某电商平台商品竞拍脚本,能自动定时、抢拍、购买
  8. 天巡:2018十一黄金周出境自由行大数据报告(附下载)
  9. vue项目中 路径使用的@和~的区别
  10. 读书、学习、工作和生活中收集的20条经典语录:1-20
  11. 公司股权外部转让流程
  12. MOOS-ivp app发布车辆位置及控制车辆运动
  13. 读书笔记:-----《第四次工业革命转型的力量》
  14. FPGA always 和assign 用法
  15. 教你如何用ffmpeg处理音频格式转换(标贝科技)
  16. javaweb复习笔记总结
  17. 调试iphone上html,如何调试 iPhone Safari 浏览器的CSS兼容问题
  18. Tomcat系列之服务器的基本配置及Nginx反向代理tomcat服务
  19. c语入门,心得和自我反省
  20. AVPlayer 实现简单的视频播放功能

热门文章

  1. Linux下samba的安装与配置
  2. 谷歌浏览器Chrome错误提示Flash过期怎么办(转)
  3. Java程序获取和修改.wav音频文件的内部结构
  4. win10开机未能正确启动_设置华硕电脑定时开机只需两步!
  5. error in ./node_modules/@lit/reactive-element/decorators/state.jsModule parse failed: Unexpected
  6. python3 关键字,内建函数
  7. 人脂肪前体细胞,研究糖尿病胰岛抵抗、肥胖的优秀体外模型
  8. ArcGIS JS API 4.x(二) 加载 3.x所说的动态地图服务图层
  9. 《智能养老》总体设计方案
  10. 笔记:《深入浅出统计学》第八、九章:概率密度、正态分布(高斯分布)