过去几周(2019年6月/ 2019年7月), 瓦尔哈拉计划的LW2阶段/原型最初于2018年10月提出,在面向公众的方面取得了重大进展。 在这篇文章中,我简要总结了最近发布的一些消息,文档和Valhalla Early Access Build。 LW2在Valhalla Wiki页面上描述为早期原型,“将内联类型[移动]到现有类型系统中。”

LW2(JVM)规范草案

丹·史密斯(Dan Smith)在标题为“ LW2规范草案 ”的消息中,在valhalla-spec-experts邮件列表上宣布“对值/内联类的预览功能质量规范的首次查看”。 该消息寻求对初始规范的反馈,并已基于该反馈进行了更新 。 这是一个进行中的工作,但是URL http://cr.openjdk.java.net/~dlsmith/inline-classes当前已设置为重定向到规范草案的当前版本。

与Valhalla相关的所有事情都还在进行中,并且可能会有所变化,但是有趣的是,在本规范草案中阅读了从JVM规范的角度来看Valhalla当前的发展方向。 以下是文档中一些更有趣的要点的示例( 可能会发生变化 ):

  • “本文档描述了对Java虚拟机规范的更改,该更改由JVM类型的改进处理进行了修改,以支持内联类 。”
  • reference类型有五种:标识类类型,内联类类型,数组类型,接口类型和对象类型。 它们的值是对对象的引用。”
  • “大多数引用类型都是可为空的,这意味着特殊的空引用(表示没有对象)是该类型的值。 一些引用类型是无空值的,这意味着null不是该类型的值。”
  • 标识类类型为在类文件中定义的非内联,非接口类命名(不包括特殊类Object)。 身份类类型可以为空。”
  • 内联类类型为在class文件中定义的内联类命名。 对于每个内联类,都有一个可为空和无空的内联类类型。 这些类型共享相同的一组值,但null除外。”
  • 数组类型由具有单个维度的组件类型组成(其长度未由类型指定)。 数组类型的组件类型可以是boolean ,任何数字类型或任何引用类型。 数组类型可以为空。”
  • 接口类型为在class文件中定义的接口命名。 接口类型可以为空。”
  • Object类型Object类命名。 Object类型可以为空。 … Object类的实例具有标识,但没有字段,其行为类似于标识类实例。”
  • “可为空的引用类型的默认值为null。 无空内联类类型的默认值是对类实例的引用,该类实例的字段均具有其类型的默认值。”

OpenJDK Valhalla Wiki:L世界

OpenJDK Valhalla Wiki页面“ L-World ”询问并回答“ 什么是内联类型? ”和“ 什么是L-World项目? ”在回答这些问题时,该页面当前将内联类型描述为“小型,不可变,无身份的类型”,这些类型“ 以前称为 “值类型”, 现在称为 “内联类型”。 当前页面将“ L-World项目”描述为“将内联类型引入语言和JDK的一系列早期原型 ”,其“基于先前的最小值类型原型(MVT)的工作”。

OpenJDK Valhalla Wiki:LW2

OpenJDK Valhalla Wiki页面“ LW2 ”将LW2原型描述为“先前原型的迭代,为“内联类型”(以前称为“值类型”)添加了进一步的语言支持和JDK API支持。” 该页面指示LW2原型基于JDK 14 分支,并且该页面包含“内联类型”的几个当前特征,我在此处列出其中一些:

  • “内联类型不能声明显式超类(对象除外)。”
  • “内联类的所有实例字段都是隐式最终的。”
  • “通过'?'对内联类型的'间接'投影 操作员。”
  • “ javac自动生成仅根据实例的状态而不是根据其身份计算的hashCodeequalslongHashCodetoString
  • “ javac允许使用==!=比较内联类型”
  • “不能将内联类型分配为null,不能将null强制转换为内联类型或与内联类型进行比较,但使用'?'的'间接'引用除外。 操作员。”
  • 可能要添加到java.lang.Class的新方法: isInlineClass()asPrimaryType()asIndirectType() / isIndirectType()asNullableType() / isNullableType()
  • 内联类型不能同步 ,不能序列化 ,不能将自己引用为直接字段,也不能分配为null

Valhalla抢先体验版

在撰写本文时,“ Valhalla 抢先体验版 ” 页面 (现已更名为“ Project Valhalla'L-World Inline Types'Early -Access Builds”)功能为“ Build jdk-14-valhalla + 1-8(2019/7/4) 。 ” 该页面以以下段落打开:“这是Valhalla项目的早期访问版本,旨在测试L-World内联类型的原型实现。” 该页面还提到:“此构建基于JDK 14的不完整版本。” 与早期访问版本一样,使用早期访问版本存在一些限制和免责声明。 听起来好像有计划“通过错误修复和性能更新”定期更新这些版本。

OpenJDK Valhalla Wiki:LW2命令行选项 / p>

对于希望测试LW2原型的开发人员, OpenJDK Valhalla Wiki页面“ LW2命令行选项 ”中列出了命令行选项 。 如页面本身所述,“它描述了实验性Java编译器,Java启动器和HotSpot JVM的命令行,以支持Valhalla项目中的L-World LW2内联类型。”

2019年6月19日Valhalla专家组会议的会议纪要

Karen Kinnear提供了2019年6月19日Valhalla专家组会议的会议记录 ,该会议记录提供了有关专家组思想的设计主题的见解(“可空的”,“可展平的”,“不可感染性”,“专用仿制药”)。 这些注释表明LW2规范草案的讨论并非旨在最终确定所有设计决策。

结论

将“内联类型”(以前称为“值类型”)完全引入Java仍需要大量工作。 但是,当前对“内联类型”的关注以及与此概念相关的工件和构建物证明了在具体方向上正在取得进展。

翻译自: https://www.javacodegeeks.com/2019/07/valhalla-lw2-progress-inline-types.html

Valhalla LW2的进展–内联类型相关推荐

  1. Valhalla项目:LW2内联类型的初步了解

    我总结了最近在Valhalla LW2 项目 " 内联类型 "中取得的一些进展,这些进展最近在我的博客文章" Valhalla LW2进度-内联类型 "中公开了 ...

  2. java 内联_Java内联类初探

    java 内联 重要要点 Valhalla项目正在开发内联类,以提高Java程序对现代硬件的亲和力 内联类使开发人员能够编写行为更像Java内置基元类型的类型 内联类的实例不具有对象标识,这带来了许多 ...

  3. c语言函数参数类型检查,内联函数在编译时是否做参数类型检查?

    先说宏和函数的区别: 1. 宏做的是简单的字符串替换(注意是字符串的替换,不是其他类型参数的替换),而函数的参数的传递,参数是有数据类型的,可以是各种各样的类型. 2. 宏的参数替换是不经计算而直接处 ...

  4. html能插入背景的行级元素,Html元素类型:块级元素、行内元素(内联元素)和行内块级元素...

    8种机械键盘轴体对比 本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选? html中的标签元素大体被分为三种不同的类型:块级元素.内联元素(又叫行内元素)和内联块级元素.事实上,我以前用的时候只 ...

  5. css 元素类型 行内元素 块元素 内联块元素 0302

    元素的分类 三种元素类型 块元素 内联元素 可变元素 元素类型的转换 display block 元素浮动后就相当于变成了块元素 display inline display inline-block ...

  6. 表格、表格CSS属性及HTML属性、表单元素、type类型、内联块的对齐方式

    表格 table thead tbody tfoot table>tr>td(th加粗居中显示) css属性 border-sapcing:数值px; 表格边框设置为细线 borde-co ...

  7. Java:从Java 8开始受益于内联类属性

    希望在几年内,Java将具有"内联类"功能,该功能可以解决Java当前状态下的许多挑战. 阅读本文并学习如何立即使用Java 8或更高版本,并且仍将受益于即将出现的内联对象数组的一 ...

  8. 内联函数inline

    结论在文章末尾处! 在C++中,为了解决一些频繁调用的小函数大量消耗栈空间(栈内存)的问题,特别的引入了inline修饰符,表示为内联函数. 内联函数的处理方式是在函数的调用点直接代码展开.在计算机系 ...

  9. C++:随笔9----模板/内联函数/容器

    C++设计范型:(到目前为止已经学习了两种C++设计范型) (1)面向过程:按照面向过程式范型吧程序划分成不同的函数. (2)面向对象:按照面向对象式范型把代码和数据组织成各种各样的类,并建立类之间的 ...

最新文章

  1. 8天学通MongoDB——第三天 细说高级操作
  2. 汇智清华,医道生机 | 第四届清华校友三创大赛医疗健康行业论坛圆满召开
  3. 轻量级高精度分割网络推荐
  4. Express 入门之Router - worldtree_keeper的专栏 - CSDN博客
  5. fastq质量值_fastq 数据格式解析
  6. from + size must be less than or equal to: [10000] but was [10550]
  7. mysql declare 赋值_sql server和mysql变量赋值的区别 以及 MySql Declare
  8. java 封闭实例_不能访问类型…的封闭实例
  9. How to enable nested virtualization in KVM
  10. db2 v9.7 tablespace_state -“表空间状态”监视器元素 0x0400
  11. 磁盘测试----fio
  12. indesign入门教程,如何旋转、翻转、锁定和隐藏内容?
  13. 从头开始vue创建项目_从头开始创建Windows 7主题包
  14. 前端网络基础-GET和POST的区别
  15. 互联网产品经理是做什么的
  16. 华为社招机考考什么_牛客网-华为-2020届校园招聘上机考试-软件类机考-3
  17. LBS的概念、历史、现状与未来(一)
  18. 消除笔哪个p图软件有?快把这些软件收好
  19. 到底什么是国土空间规划?
  20. P1395 会议 题解

热门文章

  1. P4051-[JSOI2007]字符加密【SA】
  2. 牛客-十二桥问题【最短路,状压dp】
  3. P5135-painting【组合数学】
  4. jzoj4228-C【dp】
  5. 【状压DP】滚榜(P7519)
  6. 【BZOJ3218】a+b problem (最小割 + 主席树)
  7. 双向广搜 8数码问题
  8. Hadoop入门(十五)Mapreduce的数据排序程序
  9. Oracle的分页实现
  10. 为什么说Java中只有值传递(另一种角度)