Last Updated:

Java的未来会怎样?

银狐

谦卑:我是查尔斯·谦卑。我是一名独立技术顾问,也是 Conissaunce 咨询公司 Container Solutions 的执行编辑。

我想首先询问小组成员是否可以简要介绍一下他们自己,也许还可以告诉我们是什么吸引了你们所有人来使用 Java 平台或在 Java 平台上工作?

里特:我是西蒙·里特。我是 Azul Systems 的副 CTO。我什么时候开始使用 Java 的?早在 1996 年我加入 Sun Microsystems 时。本来我不是加入做Java的,我加入做Solaris这个操作系统的。在那之后不久,很明显 Java 将成为一个相当大的东西。我想我可能会遵循那个。我确实在整个太阳年中一直遵循它。它被甲骨文收购并在那里呆了五年。然后在最近五年半的时间里,我在 Azul 基本上做同样的事情很长一段时间,只是为了推广 Java 平台,帮助人们了解如何使用它。

吉:我是特丽莎。我是 JetBrains 的首席 Java 倡导者。很长一段时间里,我是 JetBrains 唯一的 Java 倡导者。我倾向于做很多事情来告诉人们 Java 的新功能,Java 的优点。当然,在 IntelliJ IDEA 中展示它们。我的重点更多地放在 Java 语言和 Java 平台上。我从大学开始就一直在做 Java。它是 Java 1.1。我一直在做Java很长一段时间。我在许多不同的公司担任 Java 开发人员 10 多年。然后我在一家名为 LMAX 的公司工作,这是一家位于伦敦的金融平台。在那里,我们用结对编程和开源的东西做了很多很酷的事情。我参与了伦敦 Java 社区。那时我才意识到我不仅仅是想成为一名 Java 程序员,我想把我在伦敦 Java 社区用户组中与 LMAX 一起工作时学到的一切都学以致用,并帮助我身后的其他人,所以分享很多 Java 知识,这就是我最终成为开发人员倡导者的方式。因为我想,在这份工作中,我可以告诉人们我学到的有关 Java 的很酷的东西。我在 JetBrains 做这件事已经六年了。那是我在任何地方工作过的最长的一次。

普雷斯勒:我是罗恩普雷斯勒。我是 Oracle 的 OpenJDK 项目 Loom 的技术负责人。我已经断断续续地使用 Java 近 20 年了。吸引我在 OpenJDK 上研究 Java 的原因是它的绝对技术成就。如果您对编译或垃圾收集或低开销分析感兴趣,那么 OpenJDK 就是您的最佳选择。这是最先进的。

江:我是 IBM 的 Emily Jiang。我是 Liberty Cloud Native 架构师,也是倡导者。我在 Jakarta 旗下的开源项目 MicroProfile 上工作,主要设计用于执行基于 Java 的云原生应用程序的规范。我从 1999 年开始接触 Java。我认为我自学了 Java,而且我在大学学习。然后,当我 14 年前在 IBM 工作时,我只使用 Java。

Java 的流行度

Humble:去年,我们庆祝了 Java 诞生 25 周年。您认为是什么让 Java 一直如此充满活力和流行?

里特:很明显,有很多事情。我认为该语言的最初设计非常实用。如果你问 James Gosling,他总是把它描述为一种蓝领语言。它旨在完成工作。这不是一个研究项目。这在很大程度上是为了完成任务。这显然对人们很有吸引力。我认为 Java 平台的真正力量是 JVM。正如 Ron 所说,OpenJDK 项目就在那里,因为那里有很多非常酷的东西。我认为,在过去的 25 年里,它一直以这种方式不断发展,我们看到了更多的东西被添加到其中,它只是成为一个更强大的平台。它只是吸引人们。事实上,它可以扩展到互联网类型的大小,这就是它真正保持在那里的原因。

江:我认为Java的另一方面是因为它非常易于使用。此外,它有一个非常丰富的生态系统,就像在引入微服务时一样,然后人们说,“不,我们需要去发明一种不同的编程语言。” 然后最终人们转向了 Go,转向了其他语言,很多人又回到了 Java。这是因为,是的,有些语言很强大。但是,一旦出错,您就不知道或不知道出了什么问题。然后,Java 有很多工具和支持。Java 社区发展得非常快。基本上,社区充满活力。基本上,Java 开发人员试图互相帮助,然后发明新的 API 来完成这项工作。

Gee:我认为西蒙也提到了这一点。向后兼容性对于企业类型的组织也非常重要。他们可能对一种不断发展和流行的语言不那么兴奋,而对一种能胜任工作且不会崩溃的语言更兴奋,允许他们完成工作并把工作做好。即使您升级到较新的版本,也有向后兼容性。另一件事是,特别是现在您拥有 Java 社区的所有这些动力,您拥有很多 Java 开发人员。如果你想创建一个项目,你将能够雇佣人来支持,Java 是一个非常有吸引力的东西,因为你有一大群可以加入的 Java 程序员。他们有社区支持。他们有库和框架支持。Java 具有良好的向后兼容性。JVM 很强大。您可以在它之上运行其他 JVM 语言。这样的平台有什么不喜欢的?

Pressler:我认为这些年来,Java 流行的原因已经发生了变化。如今,它大多被公认为是严肃软件的严肃平台。就像特丽莎说的,它是可靠的。它提供了无与伦比的性能、生产力和可观察性组合。意思是监视和分析。如果您的应用程序需要持续多年,并且需要由大型团队维护,并且需要非常好的性能和良好的运行时洞察力,那么 Java 是不二之选。

管理在语言成功中的作用

Humble:就语言的成功而言,您认为管理的作用有多重要?我们已经讨论了向后兼容性,也讨论了社区的作用。管家的作用如何?

Pressler:我认为这非常重要。管家往往会受到很大的打击。人们需要记住,只有极少数的管家,而且数以百万计。我会说,这是一项非常艰巨的工作,几乎吃力不讨好。语言和平台的管理者通常需要考虑的不仅仅是某些东西是否有用。人们说,“我想要这个功能。它很有用。” 很多时候,他们是对的。这不仅仅是关于某物是否有用,而是关于它是否有重量。比如,效用是否证明这种幅度的变化是合理的?这是我们认为自己会在接下来的 20 年中保持的东西吗?做出这些决定很困难,而这正是管理的核心。

里特:我同意这一点。我认为 Oracle 和 Ron 提到的那些人,Brian Goetz、John Rose 和 Mike Reinhold,在实际保持 Java 朝着正确方向发展方面做得非常出色。这是一项吃力不讨好的任务。很难判断,要不要加这个功能?因为,是的,很多人会喜欢这个功能。有些人会不喜欢这个功能,并在它上面来回走动。可以有很多关于它的讨论。当然,如果我们回到四五年前,就 Java 的发展方式而言,特别是随着新的发布节奏,我们已经看到了一些非常好的新功能,但以非常积极的方式引入其中。我认为预览功能和孵化器模块之类的好处确实证明了通过允许将完全形成的功能添加到语言或 API 中,让人们试用它们并提供反馈。然后在它成为标准的一部分之前可能包括更改,我认为确实有助于 Java 保持流行并继续朝着这个方向发展。

Gee:Java 的另一件有趣且独特的事情是,您拥有 OpenJDK,它是开源的,尽管显然有各种流程参与其中。你有 JCP,你有管理方面的东西。你有这种独特的语言输入组合,我认为这有助于做一些事情,比如维护标准,建议可能推动语言前进的事情。你让管家建议应该朝哪个方向发展。我认为,目前,语言的发展方式,我认为这种紧张是一件好事。你有像 Azul 这样的人能够向 OpenJDK 提交东西。推动语言向前发展并不仅仅取决于 Oracle。这是积极的事情。

江:我觉得特丽莎说的绝对是真的。我认为 Java、管理和 Oracle 的领导;还有,它是开源的,基本上是鼓励其他公司参与。此外,询问最终用户的反馈并获得一些输入。我认为这些对于保持 Java 充满活力并朝着正确的方向前进都非常重要。

Java 与函数式编程、非阻塞 IO 的比较及其学习曲线

Humble:在函数式编程、非阻塞 IO 和学习曲线方面,您认为 Java 现在与其他语言相比处于什么位置?

Pressler:Java 不是函数式语言。它不想成为一种函数式语言。与许多其他语言一样,它确实具有函数式编程的某些特定方面。事实上,有趣的是,从 Java 1 到今天,Java 语言的最大特性是从 ML(一种称为 ML 的语言)来到 Java 的。首先,我们有泛型,然后是 Lambda 表达式。现在我们有记录和密封类型形式的排序数据类型,以及模式匹配。到 2022 年,Java 将或多或少与 1973 年问世的机器学习相当。这在很大程度上是有意为之,因为尽管我们喜欢许多想法,但编程也与人们习惯有关。这也是一个时尚问题。当时尚移动时,语言也随之移动。非阻塞IO?那就是织机计划。我认为 Java 有一个非常引人入胜的故事。学习曲线,与什么相比?很难说。也许Python更容易学习。C++ 和 Rust 肯定更难。Haskell 更难。Scala 更难。Go 大致相同。是的,我认为这是中间的好地方。

Gee:我想评论一下学习曲线方面的东西。我与很多开发人员交谈过,尤其是刚接触 Java 或从另一种语言返回 Java 的开发人员。关于开始所需的样板数量存在批评。你必须有一整个班级,你必须有 public static void main。老实说,脖子有点痛,但是一旦你习惯了,其他的一切就变得很简单了。显然,我要开始说 IDE 也是学习 Java 的好方法,因为我使用 IntelliJ IDEA,但 IDE 确实有帮助。特别是,我与其他开发者倡导者一起使用其他语言,以及像 Java 这样的东西,IDE 可以很容易地帮助您,因为它具有所有这些漂亮的类型安全,编译器会告诉你一堆东西。IDE 可以说,您想要其中之一吗?你想这样做吗?我可以为您生成其中之一吗?例如,Java 中的样板比其他一些语言多一些,尽管在最近的几个版本中它已经消失了很多。

我认为使用正确的工具,比如 IDE 或学习平台,Java 可以成为一种非常平易近人的语言,可以学习如何很好地编程。如果您正在编写 JavaScript 或其他东西,当然,您可以直接编写它,但它是否符合您的预期?因为您不会收到编译器错误,所以您不会立即获得有用的反馈。当然,我也不是要贬低 JavaScript,因为那里有一个巨大的 JavaScript 生态系统,而且非常有帮助。其中很多都是巨大的,而且进展非常快。Java 的发展速度比以前快得多,但它的稳定性要高一点,这使得学习起来不那么令人生畏,现在学习什么是正确的?我认为就学习曲线而言,Java 是一种非常有吸引力的语言。我认为我们最近没有很好地讲述这个故事。

姜:关于学习曲线的另一件事,我认为 Java 发展得非常快。然而,就像 Java 16 发布时一样,很快你就从 IDE 中获得了 YouTube 视频,比如 Trisha 本人。此外,开发人员提倡创建视频来展示如何使用这些功能。我认为了解最新的 Java 功能非常容易。我认为你只需要找到正确的渠道。

里特:我同意大家已经说过的一切。正如 Ron 所说,关于事物函数方面的有趣之处在于,它不是一种函数式语言。我记得我在大学的时候,上过一门关于 Lisp 的课程。我很快意识到我的大脑并没有以一种功能性的方式工作。我可以做程序语言,但我不能做函数式语言。它只是没有点击我。我发现,随着 Lambda 表达式的引入,以及 JDK 8 中的流 API,这又是由 Brian Goetz 和那些做这件事的人完成的。这是将函数式编程风格引入面向对象语言并使其易于使用以便人们可以使用它的一种非常好的方式。

从学习曲线的角度来看,我认为 Java 是一种很好的入门语言。同样,正如 Trisha 所说,使用 IDE 可以真正帮助您并弄清楚发生了什么,并开始输入内容。使用 Java 可以很快提高工作效率,但是有很多东西需要学习,需要了解的细节很少。学习曲线还可以,但你必须继续前进。同样,正如艾米丽所说,那里有很多东西。我们有一个很棒的生态系统。我们有很多人在制作视频和文章。以自由形式访问信息对于 Java 来说简直不可思议。

提前编译的前进之路

Humble:你们对提前编译的前进方向有什么意见吗?这似乎是解决最近 JEP 的无服务器 FaaS 冷启动等问题的好方法,这将是 410,这表明社区正在放弃这一点,或者至少不维护它的标准实现。那正确吗?人们对此有何看法?

Ritter:AOT 与 JIT 总是会是一个有趣的讨论。这真的取决于你想要做什么。很多人看着微服务,他们认为微服务,如果你把它发挥到极致,你就会去无服务器计算,你基本上想要一个功能,它会启动,做一些事情,然后关闭。那么,是的,启动速度对此绝对至关重要。资源也将是至关重要的。任何将要运行任何时间长度的东西,您总体上想要的是更好的性能。如果您使用纯 AOT,那么您将不会获得与使用 JIT 一样好的性能,尤其是使用 Java,原因是 JIT 可以执行诸如推测优化之类的事情,它可以执行比您所能获得的更积极的方法内联用静态编译。是的,您可以进行配置文件引导的优化,这已经存在很长时间了,但是它仍然无法像您实际看到它运行时那样编译代码。这是一个平衡,您是真的想要快速启动还是想要在实际运行和预热时更快的代码,至于为什么会发生这种情况?

Pressler:我认为对 JEP 410 存在一种误解,它通常与 AOT 无关,而是关于特定功能和该功能的特定实现,而该特定功能在 AOT 方面做得并不好。为了强调 Simon 刚才所说的,如果有一件事对你来说比其他一切都重要,那么你想要 AOT,那就是快速启动。我认为人们对 AOT 感到兴奋,也许认为它可以做其他事情。如果启动对您来说是唯一且最重要的事情,那么这就是您想要 AOT 的时候。如果不是,您可能并不像您想的那样想要它。在您尝试使用 AOT 之前,还有其他解决方案可以显着减少启动时间,虽然不如 AOT,但我仍然建议您查看 AppCDS、应用程序类数据共享和 jlink。他们在一起很好。如果您对 AOT 感兴趣,那么实际上社区正在以 Project Leyden 的形式考虑它。我不知道要花多长时间,什么时候,诸如此类。我认为人们需要更多地考虑他们何时真正需要它以及它的重要性。它可能会得到解决,但这可能不是主要要求。很多人会说这不是头等大事。

Ritter:因为我在 Azul 工作,所以我们有 Zing JVM,我们有一些叫做 ReadyNow 的技术,它本质上是在应用程序预热时获取正在运行的应用程序的配置文件,然后你可以重用它来减少启动预热——重新启动应用程序时的正常运行时间。

采用最新的 Java 版本

Humble:这个问题有几个变体。例如,来自 Tarik 的一个与采用有关,这是众所周知的难以衡量的事情。当然,我在准备这个小组时所做的一些研究,看起来 Java 8 仍然是使用最广泛的版本,我所研究的各个领域中大约四分之三的开发人员似乎在使用 Java 8,并且然后大约有四分之一是关于 Java 11 的。对于那些被困在 Java 8 上并且可能试图鼓励他们迁移的 Java 开发人员,和/或他们的经理试图鼓励他们迁移到更高版本,您有什么想说的?

Gee:当然,答案是,视情况而定。我可以看到问题是“除了记录、新功能、潜在安全性和性能”。这些就是我要说的。新功能很棒。性能更好,安全性也会更好。当然,事情是,就像你说的,这取决于你要把它卖给谁。如果你必须把它卖给你的管理层,他们显然不关心记录。他们不在乎使用 VAR。他们不在乎你的语法糖。对于开发人员来说,这些功能非常有趣。我一直在使用自 8 以来引入的许多功能。我们目前正在开发 Spring Boot 应用程序,开发人员倡导者正在使用 Java 16。能够使用记录真是太好了。他们只是工作。它' 很棒。当你不想把所有的东西都放在那里时,能够使用 VAR 真是太好了。中层管理人员不在乎这些。我觉得他们应该更关心性能和安全性。

很多这些事情可以归结为节省成本,实际节省资金。因为很明显,如果你跑得更快,如果你使用更少的资源并且你在云中运行,这难道不等于省钱吗?另外,当您谈论招聘和招聘之类的事情时,如果您使用的是更新版本的 Java,那也很有吸引力。在某种程度上,还有招聘故事。当然,这有点像鸡和蛋的事情,因为如果大多数开发人员目前都在使用 Java 8,他们可能会不舒服去使用他们不知道新版本的最新版本的工作特点是。我一直在与之交谈的开发人员中肯定有胃口,至少在 Java 11 上工作,会非常好,

蒋:另一件事是,即使你不使用 Java 16 的特性,比如记录,那么如果你从 8 移到 16,你仍然得到垃圾收集或优化,所有这些性能和安全修复,这些是一回事。第二件事是,也许公司的流失率很低,因为人们被允许使用新的闪亮的东西并让开发人员参与进来。他们觉得自己了解所有现代技术,他们的工作很安全。第三件事是,虽然 Java 16 不是 LTS,但是,一旦你移动到 16,那么当 17 出来时,它会直接移动到 17。你没有太大的震惊,“我的应用程序根本不起作用.” 你完全停滞了。

Ritter:我认为就采用率而言,我想知道四分之三是否真的正确。有几个关于这个的调查。我知道当我一年多前参加面对面的会议时,询问听众中的人们他们使用的是哪个版本的 Java,那是一年前,我发现实际上更多地采用了 JDK 11,而不是然后是 JDK 8,但超过四分之一。我认为随着时间的推移,这种情况也逐渐发生了变化。我认为现在有更多的人在进行这种跳跃。从 8 点到 11 点的工作量比从 7 点到 8 点要多一些。这不是很好。我认为人们可能认为它比实际工作更多。当他们真正做出改变时,他们意识到,实际上,这并不像我们想象的那么困难,然后他们就走了。一旦你切换到模块系统,然后一切都变得非常简单,因为移动到 12、13、14 等等,在向后兼容性方面实际上没有任何问题。在那里变得容易多了。我认为从 11 到 17 的转变将非常简单。

Pressler:首先,我同意西蒙的观点。我所说的数字大约是 60% 并且在 8 上下降。我预计到今年年底,大多数人将在 9 岁以上。转换的主要原因是钱。除非你是一家不在乎钱的公司,否则你可以留在 8。如果你真的在乎,我建议你搬家,因为你每天都在 8 上亏钱。你只是在浪费硬件和支持。您通过升级节省的成本几乎肯定会很快使过渡本身的成本相形见绌。西蒙提到了模块系统。起初,很多人不得不做 8 到 9、11 很多情况下的过渡,这是 Java 有史以来的最后一个主要版本。Java 9 是最后一个主要的 Java 版本,从那时起我们只有次要版本。那是一个很大的。

它有各种导致困难的变化,它有模块系统,但两者没有关系。人们看到的困难,不到1%与模块系统有关。他们只知道模块系统是一大特色,所以他们说一切都是因为模块系统。这不是为什么。主要原因是围绕 Java 8 的生态系统僵化了,人们使用了许多库,依赖于内部实现细节。那些内部实现细节刚刚改变。8 中的那些比以前的版本更多,更多的库这样做。就在我们试图改变任何东西时,许多库都崩溃了。从那以后他们就修复了,这就是为什么现在升级比两年前容易得多的原因。当然,我希望我们能在年底前看到大多数人使用 9 plus。他们中的许多人可能会使用带有 LTS 服务的旧版本,所以我会说 11,其中的一部分。其中大部分可能是错误的。我认为 LTS 主要适用于没有太多开发的遗留应用程序。我们会处理的。首先,让我们让每个人都克服 8 到 9 的困境,然后我们将消除围绕 LTS 的困惑。

Gee:我想接着提出另一个想法,那就是我们似乎一直在讲故事,我们如何通过升级向人们推销?我觉得也许我们作为开发人员应该这样做。我刚刚在一堆开源项目上完成了它,只是将 Java 8 换成了 Java 11,有时它通常可以正常工作。这样你就可以把它卖给管理层了。有效。没有什么不对的。它在 CI 中运行。我已经运行了我的集成测试,没有任何问题。我不必进行任何修复。让我们去做吧。特别是,就像你说的,罗恩,9 号附近有很多噪音和很多混乱,但如果你使用的是现代版本的 Maven 或 Gradle,如果你'

要使用或避免的 Java 功能

Humble:您是否会建议人们停止在 JVM 上使用 Java 或使用 JVM 语言或 Java 语言本身做任何事情,或者您可能会建议人们更经常使用的任何不常用的东西?也许最近有一些特定的工具被添加到 JDK 中,您觉得开发人员可能不知道或未充分利用。

Ritter:我要告诉人们停止使用的一件事,applet。停止它。我对此做了一个快速的 Twitter 民意调查,因为我想看看是否有人实际上仍在开发小程序或使用小程序。我认为大多数人要么从未开发过小程序,要么在上个世纪就已经开发过了。我想有人开玩笑说他们实际上正在开发我收到的几百个回复中的一个。是的,如果您想停止使用 Java 中的一件事,那就是小程序。

Gee:我不认为我会告诉人们停止使用 Java 中的一件事。我将稍微回到 IDE,因为对我而言,编码完全是关于 IDE 内部的体验,但我总是使用 Java。停止输入所有代码。别打了。IDE 将帮助您。它会产生东西。听听 IDE 说的那些建议,例如,在 Java 8 之前,你正在做一个匿名内部类,你想把它变成一个 Lambda 吗?去做就对了。看看代码是什么样的。使用 IDE 来帮助您学习新的语言功能。使用 IDE 删除未使用或尚未完全阅读的代码。我知道这不是问题真正要问的问题,但我与 Java 开发人员的经验是,该语言应该解决所有问题。

Pressler:我想说,也许不要再试图寻找 JRE,它已经消失了。这是一种过时的 Java 应用程序分发模式。使用 jlink 并捆绑自定义运行时。您不需要使用模块化您的应用程序来执行此操作,只需运行 jlink 命令即可。这非常简单,您可以获得自己的自定义运行时,它非常小,可以小到 30 兆字节。它运行良好。这很方便。这是部署 Java 应用程序的好方法。

蒋:另外一个是你不想在Java中使用的东西,你应该关注所有的JEP,比如所有已被弃用或被删除的功能。您需要更快地做出反应,比如避免使用它,以避免早期的巨大迁移问题。

反应式编程的未来

Humble:响应式编程是一种编程风格,可以让我们更好地利用高吞吐量服务器。显然,它在过去的三四年里变得相当流行。既然我们已经邀请了 Ron,我很想知道,对于 Loom 项目,您是否认为响应式编程是您希望我们继续做的事情,或者您是否认为它会被取代?

Pressler:简短的回答是否定的。我希望人们少用它。这些异步框架旨在满足处理大量并发请求的非常真实的需求、高吞吐量服务。对于在事务的整个持续时间内挂在操作系统线程上的每个请求模型的旧线程,根本无法满足这些要求。虽然这些库使代码或多或少可以忍受,但前提是您的整个应用程序都是以这种风格编写的,要么全有要么全无,而且它们必须如此也不错,但它们仍然从根本上与 Java 的设计发生冲突平台及其工具。调试和分析以这种风格编写的应用程序非常困难。大多数人不喜欢使用。他们喜欢使用它们,除非他们必须这样做。Project Loom 有望使每个请求模型的旧线程以及异步样式都可以扩展。您不仅不必为此重新设计应用程序、具有大量并发请求的技术要求,而且一切都将与平台和仍然非常围绕线程设计的工具协调一致。那些真正喜欢异步风格的人可能会继续使用它。其他所有人都不必为了获得相同的可扩展性和性能。那些真正喜欢异步风格的人可能会继续使用它。其他所有人都不必为了获得相同的可扩展性和性能。那些真正喜欢异步风格的人可能会继续使用它。其他所有人都不必为了获得相同的可扩展性和性能。

姜:我认为 Loom 项目有助于异步编程。处理所有新线程的创建并利用所有资源。但是,我们仍然需要更高级别的消息传递,当您创建反应式系统或此应用程序时,基本上,然后您与 Kafka 链接,然后与 MQ 链接。我认为这个系统仍然需要一个高级 API。但是,在它下面可能会受益于 Project Loom,用于资源管理。这就是为什么在 MicroProfile 中,我们仍然有 MicroProfile 反应式消息传递,并且能够做反应式消息传递架构。

Humble:Simon,Trisha,你还有什么要补充的吗?

里特:从我的角度来看并非如此。我认为 Ron 已经说明了一切,Loom 项目就是这个问题的答案。我认为这将是一种让人们的生活更轻松的好方法,因此他们不必对编程风格采取不同的方法。我非常期待 Project Loom 被集成到 OpenJDK 主流中。

Java 与其他语言的关系

Humble:您认为 Java 和 Kotlin 等其他语言在未来应该是什么关系?他们是新想法的孵化器吗?它们是针对特定的利基市场的吗?它们是否与 Java 竞争?你怎么看这行得通?

Gee:我想从 Kotlin 方面考虑这一点,尽管我实际上并没有与 Kotlin 团队密切合作。JetBrains 仍然大量参与 Kotlin 开发,尽管它也是一种开源语言,所以我们不是现在唯一开发它的人。Java 的发展方式,特别是在借用和有时适应 Kotlin 等语言的一些功能方面,确实鼓励 Kotlin 的语言开发人员也继续向前发展。因为如果 Java 将继续每六个月发布一次并发布其他开发人员喜欢的漂亮有趣的功能,那么像 Kotlin 这样的语言将不得不继续拥有一些区别于老式、缓慢的 Java 类型范式的东西.

同样,Kotlin,当他们引入新功能时,比如他们有 VAR 和 Val,就像 Java 有最终的 VAR,因为它确实如此。当 Kotlin 引入这些新特性时,Java 开始审视 Kotlin 并说:“这在 Java 中很有用并且很有帮助”,或者,“实际上,我们无法真正让它在 Java 社区中运行得那么好。” 我确实认为这是一场军备竞赛,但主要是一种共生关系,因为如果两种语言似乎有效,它们就会相互借用功能。Kotlin 有许多不同的平台。它可以编译到很多地方。它并不总是只是 JVM 语言。Kotlin 受益于 JVM 的改进。只要 Java 正在改进其性能和安全性,Kotlin 并不总是与 Java 完全竞争。我觉得 Loom 也有可能使 Kotlin 受益。我真的不知道如何,但我觉得它可以。只要 Java 在不断发展,它也会使这些其他语言受益。我真的觉得这是 JVM 语言之间的一种共生的、有益的关系:Java 语言和 JVM 平台。

Pressler:我认为 Java 迄今为止还没有从 Kotlin 借用过任何一个特性。将来它可能会获得可空性类型。那可能是第一个。我们试图借用思想的语言是 ML,除了我们仍然到 ML 1973 为止。这就是我们的目标,所以泛型、Lambda 表达式、记录、密封类型和模式匹配,然后将更多或更少是 ML 1973。在那之后,我们会看到。VAR 和 Val,那也是 1973 年,来自 ML。有一天,我们可能会尝试从 Kotlin 和其他语言中借用功能,但不同的语言有不同的设计理念。Java 的设计理念从很早开始就希望成为一种非常保守的语言。该平台需要非常创新,但语言应该保守。

这似乎是一个伟大的考验。虽然有很多新人喜欢快速移动的语言,但似乎大多数人不喜欢。Java 平台为每个人提供了一个选择,这很棒。Clojure、Kotlin 和 Scala 之类的语言当然发展得更快、更具创新性,而 Java 则故意保守。根据您喜欢的任何一种,平台的设计可以帮助他们协同工作。当谈到 Java 平台时,人们有时会抱怨的一件事是泛型类型比率。使所有这些语言一起工作的一件事是泛型类型比率。如果 Java 已将其自己的特定变体策略构建到运行时中,那么这些语言就不能像它们一样进行互操作。多亏了类型比,我们才能让所有这些语言一起工作。

Ritter:我将不得不在某个时候与 Ron 进行对话的一件事是,我们在什么时候称 Java、ML?为什么机器学习还没有这么流行?我认为另一件事是显然 Highlander 原则不适用于这里,因为不能只有一个。拥有多种语言以不同方式提供可编程性的整个想法是重要的。真的,关键在于它们都可以编译成字节码,因此它们可以在 JVM 之上运行,并且它们可以利用您从 JVM 获得的性能、可管理性以及所有类似的东西. 我认为这是那里的关键。显然,正如 Ron 所说,有一种想法是环顾四周,看看其他语言(主要是机器学习)做了什么。我们有,我相信,从 Python 借用了一个东西,那就是多行字符串,因为它有三个双引号。如果我没记错的话,那是 Python 拥有的。我认为看看其他人在做什么和思考是健康的,我们如何使用它?

江:这倒是真的。我认为我们应该鼓励多种语言。然后通过计算,他们互相学习,然后鼓励其他语言运行得更快。同样,它们都是 JVM 语言,因此社区可以共同改进 JVM。这很棒。

在未来 25 年保持 Java 的相关性

Humble:在接下来的 25 年中,为了让 Java 保持相关性,您希望看到哪一件事发生?

江:Java 应该继续前进。不要停下来。保持现在的节奏。

里特:我非常同意这一点。我认为整个 6 个月的发布周期对于 Java 来说是一个了不起的举措,可以保持它的新鲜感并通过更快地引入新功能来保持它的发展。我认为这是关键的事情之一。我们必须保持这个速度。

Pressler:就个人而言,仅代表我自己,我希望看到更多关注小事。我一开始就说过,Java 是严肃软件的首选平台。我认为它对于不太严肃的软件也应该很有吸引力,因为这是大多数程序员开始的地方。我们在该领域进行了一些不错的更改,最显着的是 JShell,它是 Java 的 REP,以及 Java 源文件启动器,它允许您直接运行单个源文件而无需单独编译它。我们需要看到更多。我很想看到一个基本的构建工具,它是 OpenJDK 的一部分。

Gee:我同意所有这些。我将继续讨论,而不是谈论 Java,这种语言。我认为可以继续使 Java 具有相关性和吸引力以及一个伟大的平台向前发展的是社区、用户组、库、框架,以及我们免费共享的事实。事实上,Azul 正在研究大量的博客文章、视频和 Foojay。所有这些都是让开发人员入门、启动和运行的绝佳资源。我们作为一个对该技术不太熟悉的团队一直在研究这个 Spring Boot 应用程序,所有的教程、博客文章和视频都帮助我们快速启动和运行。即使发行过程中出现间歇期,

来自:https://www.infoq.com/presentations/java-16-17-future