【ArchSummit架构师峰会】探讨数据与人工智能相互驱动的关系>>> 了解详情
写点什么

给 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:05705
用户头像

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

关注

评论

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

架构实战营 - 模块 5- 作业

泄矢的呼啦圈

架构实战营

Spring 是什么?如何去了解spring?

???

Java spring 程序员 编程语言 spring M

业界大佬跨界造车底气何来?

容光

AI

太顶了!阿里大牛离职带出来的这份“Java架构核心宝典”学习笔记,差距不是一点点

Java 程序员 架构 面试

ubuntu64位搭建OpenVINO系统(上篇)

IT蜗壳-Tango

5月日更

Don't judge others, Work on yourself

escray

学习 极客时间 5月日更 朱赟的技术管理课

无人驾驶汽车有望持牌上路!这些公司称已经布局

容光

AI

区块链早报|拜登的2022年预算包括新的加密货币报告提案

容光

加密货币

架构师实战营-模块4-设计千万级学生管理系统的考试试卷存储方案

吴建中

架构实战营

由云入端:一场云计算巨头的闯关游戏

脑极体

🔎【Java 源码探索】深入浅出的分析ClassLoader

洛神灬殇

Java ClassLoader 类加载器 5月日更 双亲委托模型

记录:28天拿到字节offer的全过程(Java岗)

Java架构师迁哥

废物,我TMD一个985却斗不过专科生(大厂java开发2年被裁)

Java架构师迁哥

算法训练营 - 学习笔记 - 第七周

心在飞

证监会最新政策重点来了!

容光

监管合规

星石深度:如何看待近期人民币汇率走强?

容光

探索科技手段下的食品安全,区块链冷链追溯平台建设解决方案

源中瑞-龙先生

一篇文章弄清磁盘的里里外外及访问特性

SunnyZhang的IT世界

🎙️ 如何写好一篇新闻资讯稿?(时事政治篇)

洛神灬殇

写作技巧 5月日更 新闻资讯 案例分析 时事政治

微服务注册中心:Consul——服务发现

程序员架构进阶

微服务 Consul API网关 28天写作 5月日更

梯度下降法2

Qien Z.

5月日更

Mysql 常见概念

water

Java面试基础:面向对象和面向过程的区别

三掌柜

5月日更

架构训练营模块 5 作业

Geek_649372

架构实战营

解析如程688免费住民宿的商业模式

石云升

商业模式 5月日更

Java岗熬了6年,终成P8,只因搞懂了这七件事

Java架构师迁哥

Github上“Java面试考点大全”被我扒下来了,20+互联网公司,应有尽有

Java架构师迁哥

喜讯!腾讯团队Redis技术笔记,下载量已突破30W;附下载方式

Java架构师迁哥

IDEA中request获取不到getParameter方法

咿呀呀

javaWeb Request getParameter

iOS打包签名,你真的懂吗

Geen练

ios 打包 签名 iOS Developer

网络攻防学习笔记 Day29

穿过生命散发芬芳

5月日更 网络攻防

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