Java 有个问题:Java 语言和平台的开发速度比以往任何时候都要快,但许多开发人员仍旧坚持使用已经发布了五年的 Java 8。
本周在伦敦举行的 QCon 会议上,Trisha Gee,一位 JetBrains 的开发者,在发表演讲前在 Twitter 上进行了调查。78%的人表示,他们正在使用 Java 8。考虑她的粉丝大多倾向于使用最前沿的技术,实际的比例可能会更高。
你正在使用哪个版本的 #Java ?
— Trisha Gee (@trisha_gee) 2019-2-18
这让人感到非常遗憾。Java 8 的后续版本中加入了许多功能强大的新特性:JLink 可以为 Docker image 创建更小的 Java 可执行文件,用 var 可以代替类型声明,JShell 为 Java 提供了交互式功能。此外还改进了 collection、optional 实现、改进了垃圾回收、引入了模块化机制等等。
那么,为什么开发人员没有升级?一句话,Java 9 进行了重大变更,包括内部重组、新的模块化机制(Jigsaw 项目)并移除了一些很少使用的 API。这些改变破坏了代码,甚至那些愿意升级的开发者会顾虑依赖性问题。一位参会者说:“我们使用的开发库还没有支持最新 Java 版本”。
“我想解释为什么升级是必要的”,来自 Oracle 的 Ron Pressler 说道。他是 Java 平台语言开发小组中的一员,也是 Loom 项目的负责人。
“Java 有数十亿行代码,而 Java 9 确实破坏了一些东西。这是因为 Java 已经20多岁了,在接下来的20年里,它会继续大受欢迎。我们必须考虑20年后的情况。Java 9 之前的 JDK 结构是不可维护的。如果不做出这样的改变,就无法保持 Java 的竞争力。因此,改变是绝对必要的”。
JClarity 的 CEO Martijn Verburg 表示,目前已经取得了一些进展:“在最受欢迎的1000个 Maven 库中,目前大约65%兼容了 Java 9+。6个月前,这一比例大约是42%,可能还需要一年时间才会完全兼容“。JClarity 是一家专注解决 Java 性能问题的公司。
然而,开源项目和企业私有库的升级之路会很漫长。Java 8 现在仍然支持得很好,没有强烈的升级冲动。“未来将会出现两个世界”,一位与会者表示,“一个 Java 8 的世界,一个 Java 11+ 的世界”。
在一个 QCon Java 座谈会上,Pressler 看起来有点沮丧:“在 Java 9+ 上无法运行代码没有特别的原因,可能只需要修改一些过时的 API 调用或者类似的工作。Java 9+ 并不是一门别的什么语言”。
与此同时,他也承认目前每六个月给 Java 一个新版本号的做法的确给人造成了不好的印象。
“我们做过的最让人感到困惑的事情之一,就是用整数版本编号给每六个月发布的新版本命名。从 Java 9 到 Java 10,你会认为这是 Java 一个新的主要发布版本,但事实并非如此。Java 10 并不是一个主要发布版本,而是一个小版本。最近的一个 Java 主要发布版本是 Java 9。在可预见的未来,不会再有这种情况发生了”。
Oracle 修改了 Java 11 的授权策略——必须获得商业许可。除非你愿意跟上开源 OpenJDK 的步伐,这会不会也是一个问题?
“Java 实际上变得更自由了”,Verburg 说道。原因在于 Oracle 已经正式支持 OpenJDK 并与 OpenJDK 提供者共享安全补丁。“但如果访问 Oracle 的网站下载 Java,你必须做出决定。是要商业版 Java、Oracle 的 OpenJDK,还是其他 OpenJDK?你不得不做出自己的选择。这就是市场中的困惑”。
Oracle Java SE 产品经理 Donald Smith 对此表示赞同,但他补充道:“不幸的是,Register 杂志无法刊登题为‘现在 Java 比以往任何时候都更自由’的文章,人们是不会看的”。