
作家 | David Cassel 译者 | 幽谷 操办 | Tina 本文起初发布于 THENEWSTACK 博客。 在上个月举行的 JVM 峰会上,Java 谈话架构师 Brian Goetz 在演讲中 量度 了 Java 的昔时发展。 Goetz 探讨的并非 Java 的近况,而是假定的一系列特质——这些特质不是为了编写更好的要津,而是动作一种机制,使谈话更具可成长性和可扩张性。” 简而言之,Goetz 先容了他如何看待 Java 谈话的演变。 Goetz 说,“我花了许多技术筹商其他谈

作家 | David Cassel
译者 | 幽谷
操办 | Tina
本文起初发布于 THENEWSTACK 博客。
在上个月举行的 JVM 峰会上,Java 谈话架构师 Brian Goetz 在演讲中 量度 了 Java 的昔时发展。
Goetz 探讨的并非 Java 的近况,而是假定的一系列特质——这些特质不是为了编写更好的要津,而是动作一种机制,使谈话更具可成长性和可扩张性。”
简而言之,Goetz 先容了他如何看待 Java 谈话的演变。
Goetz 说,“我花了许多技术筹商其他谈话的作念法。咱们认为,对于应该如何鼓励这项职责,咱们当今仍是有了一个荒谬澄莹的意识。”
伸开剩余89%在 Reddit 上,Goetz 将他的演讲描述为“呈报可能的发展场地”。现时还莫得认竟然 Java 增强提案,他暗意,“这内容上是咱们第一次详备征询这个问题。总要从某个地方入手。”
这是一个绝佳的契机,不仅能见证编程谈话的演变进程,更能窥见推动这些有规划背后的广大形而上学。
1“可成长”谈话的形而上学
在演讲入手时,Goetz 强调,他不是要接洽“规划立即托福的特质”。相悖,他将看一些永远来看“更具启发性的例子”。Goetz 将演讲标题定为“Java 谈话的成长(Growing the Java Language)”是有原因的。Goetz 谨记,1998 年,Sun Microsystems 测度机科学家 Guy Steele 发表过一篇著名的论文(和 演讲),标题是“一门谈话的成长(Growing a Language)”。
Goetz 说,Steele 发出了“一个行动命令,要求谈话想象者将可成长性动作编程谈话想象的中枢维度之一。”
固然许多谈话允许用户通过用户创建的库来扩张“词汇”,但 Steele 指出,要是新词汇看起来与谈话我方的基本“原语”不同,那无疑会增多贫困。Goetz 说,“在许多方面,这篇论文是 Valhalla 技俩标发令枪”——这是一个始于 2014 年的 OpenJDK 技俩,由 Goetz 指挥,旨在孵化新的 Java 谈话特质。
因此,Goetz 思要描述的不是 Java 的新特质,而是一种谈话演变形而上学——在添加 新的 Java 特质 时优先接洽可扩张性——过火完结机制。Goetz 的幻灯片上有这么一句话,“有东谈主会说这太过分了,有东谈主会说这还不够。”
“而咱们等于这么知谈咱们……偶合在中间。”
2在 Java 中引入一个新想法:Witness
那么这个新理念是什么呢?Java 的措施界说接口被称为“活动蓝图”。Goetz 暗意,当今“咱们但愿完结接口的通盘功能——将一组定名活动归入定名连合(named bundle),用于声明某种类型或某组类型(并允许编译器进行类型检查)。“
这里有一个要害的分辩:Java 谈话想象团队但愿它是对于类型的,而不是类型实例。
有一张幻灯片解释说,“咱们思将这种活动窜改到第三方 witness 对象上”。
为此,只需提议增多一个通俗平直的要害字——一个 witness字面量。这么一来:
就造成:
自后,Goetz 向听众解释说,“在 Java 中添加类型类,只需在现存的谈话结构(如接口、字段和措施)上添加相对较少的内容——一个发布 witness 的机制和一个查找 witness 的机制。”
为什么不屈直界说包含通盘所需措施的接口,然后让类完结阿谁接口呢?Goetz 指出,事实诠释这种轮廓方式并不老是灵验,它会让谈话想象者濒临大批辣手的规模情况和“罗网”。。
Goetz 的下一张幻灯片解释说,这是“竟然用错了器具。”
“咱们需要某种与接口相似但又不完全疏通的东西。”Haskell 有类型类(“对类型本人进行轮廓,而不是类型的活动”),而 C# 和 Kotlin 齐在“进行他们我方的一系列探索”。C# 社区建议了访佛的东西:shape 和 extension。
“通盘这些齐是围绕吞并个问题,那等于:如何轮廓类型的活动,而不把它动作类型界说的一部分?”
3发展机遇:潜在的新 Java 特质
Goetz 说,这个思法仍是迭代了许屡次,“咱们仍是将其索要成更适当 Java 的东西,比之前的一些思法更粗略。”
有一张幻灯片说,“这是对于谈话成长的”。Goetz 看到了“可成长性”的巨大后劲,并建议了几个新的潜在特质:
新的数值类,但与“原始类型的运行时活动相同”——比如 16 位浮点数。
数学运算符。Goetz 说,对于 Float16 变量来说,使用轨范的加号“就相等好”,而不是单独的措施。其他谈话仍是尝试了这种所谓的“运算符重载”——把柄触及的变量类型,将象征与多个操作干系起来。Goetz 说,这“在某种进程上是谈话的雷区……许多谈话齐在使用运算符重载时齐碰到了多样不幸性的问题。”
连合抒发式,“用于构建访佛序列的结构”,访佛于 C# 中提供的功能。“在表率层面上,这是一个‘你为什么不屈直……’的问题。但这似乎是一条可行的旅途,不像 Java 7 时间的提议那样不成行。”
创建型抒发式(Creational expression)。在创建数组时,元素的值默许老是“null”或零。要是有一个 witness 不错标明何时存在(和不存在)灵验的“空缺”值会若何?Goetz 说,在 Valhalla 技俩中,在运升沉数组时添加灵验性检查“一直是咱们比拟夷犹的一个特质”,因为他们不思把它添加到 Java 虚构机(VM)中。但“这种措施不错将该特质保留在谈话中,同期又允许特定的类在参与该特质时以是否需要作念非凡的职责为依据。因此,这意味着咱们不错将这种活动放到一个合适的地方,这嗅觉很好。”
新的数值类,但与“原始类型的运行时活动相同”——比如 16 位浮点数。
数学运算符。Goetz 说,对于 Float16 变量来说,使用轨范的加号“就相等好”,而不是单独的措施。其他谈话仍是尝试了这种所谓的“运算符重载”——把柄触及的变量类型,将象征与多个操作干系起来。Goetz 说,这“在某种进程上是谈话的雷区……许多谈话齐在使用运算符重载时齐碰到了多样不幸性的问题。”
连合抒发式,“用于构建访佛序列的结构”,访佛于 C# 中提供的功能。“在表率层面上,这是一个‘你为什么不屈直……’的问题。但这似乎是一条可行的旅途,不像 Java 7 时间的提议那样不成行。”
创建型抒发式(Creational expression)。在创建数组时,元素的值默许老是“null”或零。要是有一个 witness 不错标明何时存在(和不存在)灵验的“空缺”值会若何?Goetz 说,在 Valhalla 技俩中,在运升沉数组时添加灵验性检查“一直是咱们比拟夷犹的一个特质”,因为他们不思把它添加到 Java 虚构机(VM)中。但“这种措施不错将该特质保留在谈话中,同期又允许特定的类在参与该特质时以是否需要作念非凡的职责为依据。因此,这意味着咱们不错将这种活动放到一个合适的地方,这嗅觉很好。”
多功能谈话扩张并非莫得前例。Goetz 提到了两个早期的“使用库扩张谈话特质的著名例子”——foreach 轮回和 try。设立者只需完结 Iterable 类就不错使用 foreach 特质。(Goetz 说,为了完结 Iterable,JDK 的设立者随后“对许多类进行了调动”——其他 Java 设立者也这么作念了。)但最挫折的是,它看起来就像是“内置的”。
Goetz 很欣慰 Java 莫得将该特质死心在少数几个无庸赘述的用例(如列表、映射和连合)中。“我竟然很欣慰有东谈主站起来说,‘不,不,除了少数魔法类以外,其他类或者参与其中竟然很挫折。’”
Goetz 说,他思接续这一传统。
4Java 昔时发展门道图
在演讲完了时,Goetz 说,它不仅展示了 witness 的想法,还勾画出了“如何将其用于四个潜在的特质,而这些特质仍是困扰咱们很长技术了。”
量度昔时,Goetz 笃信,witness 将“使你或者想象出更好、更丰富的特质,让用户不错作念更多事情的特质。最终,咱们将来也许不再需要想象那么多的谈话特质。……从永远来看,但愿咱们或者期骗这少许来构立功能更丰富的通用库和条目活动等。”
“但短期内,咱们不错用它来提供可扩张的谈话特质,包括东谈主们永久以来一直但愿添加的特质。”
Reddit 上有一位驳斥者自后以至开打趣 说,Goetz 的演讲让他们思起了“龙与地下城”中的法术。“总计有那么一个技术,我嗅觉 Brian 马上就要施放魔法飞弹了。”
他自后补充说,“这是一次很好且相等原理原理的演讲。我但愿这些特质或者完结。”但 Goetz 的临了一张幻灯片澄莹地确认了咱们现时所处的位置。“前几张幻灯片中的例子还不是想象,仅仅思法。”
尽管如斯,在 另一条 Reddit 驳斥 中,Goetz 暗意,Java 想象团队当今有一个让他们“感到闲逸”的故事,“是以咱们准备共享它。但请明慧,那仍然是一个故事,还需要 Valhalla 技俩先完成许多事。”
Goetz 的演讲获得了强烈的掌声,随后他入手接管不雅众的发问。首位发问者坦言,他看到了该理念的巨大价值,并称 Goetz 的演讲是“一个荒谬广大的提案,却只需要荒谬小的语法变更”。
Goetz 的复兴?“嘘开云kaiyun体育,别告诉他们!”
发布于:北京市