写点什么

给 JVM 加上长程跳转、尾调用和元组

  • 2007-09-26
  • 本文字数:1189 字

    阅读完需:约 4 分钟

John Rose 在今年夏季撰写了一系列文章,Charles Nutter称这些是“与JVM 未来发展方向以及一系列新版Java 潜在变化相关的令人兴奋的文章。”虽然John 确实谈到对Java 语言的影响,但文中的重点是虚拟机。这些改进对于在JVM 中为其他语言提供支持来说都是非常重要的,包括函数性语言和动态语言在内。

在文章的开头,John Rose描述了长程跳转(longjump)特性(或称为非本地退出,non-local exit),这项特性使在Java 语言中实现闭包成为可能。如果给异常处理机制加上预分配(如克隆)的跟踪栈,就有可能实现非本地退出,而不必为了流程控制支付高昂的异常处理的代价。如果实现得好,非本地退出的代价可以低于本地退出/ 返回(return)的3 倍,并能够被优化成机器级的goto 指令。在Java 7 的一个版本中,就用了这种方法来优化Object.clone() 的执行成本

接下来,John 阐述了 JVM 中的尾调用(tail call):即以一种明确的方式来来压缩尾递归的能力(“硬尾调用”),或仅作为一种编译器最优化(“软尾调用”)。这篇文章引起了对实现方法和用途的热烈讨论,不过尾调用对 JVM 上的函数性语言(或具备某些函数性特征的语言)肯定有所帮助,也会有利于从 invokedynamic (JSR-292) 得益的动态语言:

尾调用也会影响到 invokedynamic。硬尾调用让你在实现动态调用上有更多的选择:你可以转向到一段负责派发的分支例程,该例程随后会以尾调用返回到正常的例程上。(实际上,这就是 java.lang.reflect.Method.invoke 目前的工作原理,至少在返回值没有被装箱的情况下是如此。)因为 Scheme 是一种动态语言,所以尾调用与 JSR 292 有一点关系。

最后,John 谈到了元组(Tuple)。他翻出了早在 2004 年就提出的一个提议,里面描述了“纯粹的”元组类型(简单元组)和具备元组语义的值类(value class),这种值类不需要记得它的类型身份(即成为标记元组,tagged tuples)。元组也意味着支持具有多个返回值的方法。再一次,重点在于 JVM 而不是 Java 语言是很清楚的:

加上了元组特性的语言,很可能会在一组具有类型的值,以及指向这些值所在堆对象的引用之间提供规范的翻译。比方说,每个值类很可能都有一个构造器,其参数签名就是相应的标记元组。元组很可能被实现成堆中的固定长度的对象数组,或者是不可变的泛型工具类(generic immutable utility class),里面包含着装箱后的基本类型值成员(就像 varargs 中一样)。

这篇文章的讨论也一样很热烈,John 在讨论中回应说:

实际上在 Java 语言中加入值类会遇到困难的设计问题,正如你清楚指出的那样。我写此文的意图是指出,在 JVM 中添加元组是非常简单的,并且不需要解决语言设计方面的问题。

你对这些提议有没有共鸣呢?你是更想看到 JVM 增加对其他语言的支持,还是 Java 语言的演进?还是说这两个目标并没有冲突? InfoQ 会继续跟踪这些主题的最新发展。

看英文原文: Longjumps, Tailcalls, Tuples for the JVM

2007-09-26 20:051269
用户头像

发布了 74 篇内容, 共 15.3 次阅读, 收获喜欢 3 次。

关注

评论

发布
暂无评论
发现更多内容

Vue中组件的几个重要点

我搬去水星了

6 月 优质更文活动

DHR数智人力:智能学习加速人才培养与创新

用友BIP

人力资源 人才 数智人力

「悦数图数据库」亮相中国国际信息通信展览会,推进图技术产业化发展

悦数图数据库

通信 图数据库 运营商

隆重共建开放,共享未来 | 2023开放原子全球开源峰会OpenAtom OpenHarmony分论坛即将启幕

开放原子开源基金会

开源 OpenHarmony 开放原子全球开源峰会

Postman 和 GraphQL:最佳实践指南

Liam

Java Postman API graphql 接口工具

实例讲解Flink 流处理程序编程模型

华为云开发者联盟

开发 华为云 华为云开发者联盟 企业号 6 月 PK 榜

共享电动单车生产厂家怎么找合适

共享电单车厂家

共享电动车厂家 共享电单车厂商 共享电动车生产 本铯电动车厂家

Vue-组件的嵌套

我搬去水星了

6 月 优质更文活动

vue-表单元素进阶收集操作

我搬去水星了

6 月 优质更文活动

vue-基本操作-收集表单元素绑定的数据

我搬去水星了

6 月 优质更文活动

「悦数图数据库」亮相中国国际信息通信展览会,推进图技术产业化发展

悦数图数据库

通信 图数据库

华为云 UCS GitOps:轻松交付多集群云原生应用

华为云开发者联盟

华为云 华为云开发者联盟 企业号 6 月 PK 榜

腾讯企点客服赛道国内TOP1!Gartner报告公布最新市场份额

人称T客

Vue单文件组件

我搬去水星了

6 月 优质更文活动

Excelize 荣获 2022 年中国开源创新大赛一等奖

xuri

开源 编程 开发者 创新 Excelize

电源管理IC下游市场向高端工业和汽车领域转型,这家芯片设计厂商值得关注

华秋电子

Java线程池一、基本概念和原理

echoes

Java 线程池

构建财务共享体系,智能化引领转型升级

用友BIP

财务共享

生态伙伴 | 中电创新科技集聚示范区携手华秋硬创,加速智能硬件孵化

华秋电子

面向多告警源,如何构建统一告警管理体系?

阿里巴巴云原生

阿里云 云原生 可观测

华为云新一代分布式数据库GaussDB,给世界一个更优选择

华为云开发者联盟

数据库 后端 华为云 华为云开发者联盟 企业号 6 月 PK 榜

Vue组件-非单文本组件

我搬去水星了

6 月 优质更文活动

NFTScan 与 Realy 达成合作伙伴,双方在元宇宙 NFT 数据方面进行深度合作!

NFT Research

NFT Metaverse

旭阳数字:让焦化行业供应链更数智

用友BIP

数智平台

Vue自定义指令

我搬去水星了

6 月 优质更文活动

微服务高并发概念与核心类:调用链上下文与入口类

互联网架构师小马

中企出海所面临的几点人力资源挑战

用友BIP

中企出海

大模型扎堆「赶考」,语文还是国产AI行,文言文能力超过95%考生

Openlab_cosmoplat

人工智能 机器学习 AI 高考

【6.02-6.09】写作社区优秀技术博文一览

InfoQ写作社区官方

热门活动 优质创作周报

Vue基本的内置指令

我搬去水星了

6 月 优质更文活动

突破创新!Windows主机助你打造独一无二的网站!

一只扑棱蛾子

Windows主机

给JVM加上长程跳转、尾调用和元组_Java_Geoffrey Wiseman_InfoQ精选文章