写点什么

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

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

关注

评论

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

如何快速上手YashanDB数据库管理系统?

数据库砖家

基于YOLOv8的粉尘污染检测识别|完整源码数据集+PyQt5界面+完整训练流程+开箱即用!

申公豹

人工智能

flyway报错SLF4J: No SLF4J providers were found.或者SLF4J: Defaulting to no-operation (NOP) logger implem

刘大猫

人工智能 数据挖掘 机器学习 算法 数据分析

Office文档投毒技术:SHVE中的会话劫持视觉利用新突破

qife122

网络安全 Office宏

Ollama + Python 极简工作流

测吧(北京)科技有限公司

微店商品详情API接口开发指南:从零到实战

tbapi

微店API 微店数据采集 微店商品详情API 微店数据分析

DNS解析教程:什么是NS记录?NS记录怎么配置?

国科云

甘特图:提升项目管理效率的战略性工具

Tecjt_锦图科技

项目管理 甘特图

Python爬虫实战——使用NetNut网页解锁器获取亚马逊电商的苹果AirPods Pro3商品信息

袁袁袁袁满

爬虫 亚马逊 Python爬虫 爬虫实战

内网协同办公软件 BeeWorks:何以成为企业数字化底座?​

BeeWorks

即时通讯 IM 私有化部署

安全与效率的平衡术:安全空间

权说安全

安全空间

免费局域网聊天工具好用吗?BeeWorks企业IM即时通讯软件

BeeWorks

即时通讯 IM 私有化部署

华鼎冷链“雪豹数智大模型” 数据要素如何重构仓配履约效率

科技汇

微店商品列表API接口开发指南:从零到实战

tbapi

微店API 微店商品列表API 微店数据采集 微店列表数据采集 关键词搜索微店列表接口

鸿蒙应用开发从入门到实战(五):ArkUI概述

程序员潘Sir

鸿蒙 HarmonyOS

大数据-97 Spark 集群 SparkSQL 原理详细解析 Broadcast Shuffle SQL解析过程

武子康

Java 大数据 flink spark 分布式

YashanDB数据库版本升级与新特性技术指南

数据库砖家

哈尔滨三级等保:为关键信息系统打造坚固安全防线

等保测评

哈尔滨等保测评公司选择:企业适配性筛选策略

等保测评

第二届数字经济与计算机科学国际学术会议(DECS 2025)

搞科研的小刘

数字经济 计算机科学

CST软件时空调制非互易设备 --- 谐波平衡,变容二极管,超表面,场路结合

思茂信息

cst cst操作 cst电磁仿真 CST软件 CST Studio Suite

上架 App Store 的注意事项

北京木奇科技有限公司

APP开发 软件外包公司 APP外包

从“被动应对”到“主动防控”:舆情监测的角色转变

沃观Wovision

跨境贸易 出海企业 沃观Wovision 舆情监测系统 海外舆情监测

鸿蒙开发者孙晨阳:撬动端侧 AI 开发新可能

最新动态

云环境中的日志收集和处理方案

数新网络官方账号

“智能安全验证”,到底智能在哪?

塞讯科技

网络安全 信息安全 安全验证 BAS

Seedream 4.0生图邪修玩法大合集来啦

苍何

电动汽车模拟器构建指南:深入解析EVSE安全测试技术

qife122

硬件安全 电动汽车充电系统

“鸡蛋不能放一个篮子里”,如何确保千亿数据万无一失?

poemyang

分布式 分布式系统

黑龙江等保测评:从启动到闭环的全周期流程拆解

等保测评

第六届计算机工程与智能控制国际学术会议

搞科研的小刘

计算机工程 智能控制前沿

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