- GraalVM 发布日历
- 适用于 JDK 24 的 GraalVM
- 适用于 JDK 23 的 GraalVM
- 适用于 JDK 22 的 GraalVM
- 适用于 JDK 21 的 GraalVM
- 适用于 JDK 20 的 GraalVM
- 适用于 JDK 17 的 GraalVM
- GraalVM 22.3.x
- GraalVM 22.2.x
- GraalVM 22.1.x
- GraalVM 22.0.x
- GraalVM 21.3.x
- GraalVM 21.2.x
- GraalVM 21.1.x
- GraalVM 21.0.x
- GraalVM 20.3.x
- GraalVM 20.2.x
- GraalVM 20.1.x
- GraalVM 20.0.x
- GraalVM 19.3.x
GraalVM for JDK 21.0.2
(2024-01-16)
这是 GraalVM 社区版 的 2024 年 1 月关键补丁更新 (CPU)。它基于 OpenJDK CPU,包含作为该 CPU 一部分发布的所有 OpenJDK 安全修复、平台更新以及一些 GraalVM 错误修复。这是一个完整的分发版,取代了之前发布的 GraalVM 社区版 for JDK 21。
- 将 GraalVM 社区版 for JDK 21.0.1 更新至 **21.0.2+13**。请参阅 OpenJDK 21 Updates。
- 版本兼容性
- Truffle 语言及其他组件 版本 **23.1.2** 专为 **GraalVM for JDK 21.0.2** 设计。
- 编译器修复
- 重新排列了二元算术运算,这些运算可以针对循环不变量和常量重新关联。
- 修复了 Sulong 基准测试因编译失败而失败的问题。
- 改进了 AArch64 架构支持:允许
BranchOp
发出FarBranch
;使 AArch64 HotSpot 空常量代码生成更通用。 - 确保 Guards 锚定到
CaptureStateBegin
。 - 编译器现在在
IntegerLessThanNode
中进行类型转换前检查戳记。 HeapImpl.dirtyAllReferencesOf
对于 Epsilon 垃圾收集器必须是空操作。- 简化了
ValueAnchorNode
的实现。 - 在生成
checkcast
和instanceof
时,移除了显式的空检查异常。
- Native Image 修复
- 更新了操作系统检测代码,以识别 Windows 11 和 Windows Server 2022。
- 添加了一个选项,允许 VM 操作超出最大堆大小。
- 修复了在启用断言时
-XX:+PrintGCSummary
的问题。 - 修复了隔离区拆除期间的崩溃问题。
- Native Image 现在会忽略崩溃的线程。
- 改进了 OutOfMemoryError 消息。
- Native Image 现在在通过
MemoryPoolMXBean
查询内存使用情况时报告一致的值。 - 为
mx
工具引入了--disable-debuginfo-stripping
参数。 - 修复了处理存储在错误位置的
native-image
JSON 属性的问题。 - 添加了一个修复,以防止
System.console().readPassword
失败。 - 改进了 BFD 名称混淆器 #7423 中原始类型的混淆。
- 修复了当驱动程序是镜像时,
native-image --bundle-create,container
命令失败的问题。 - 在 NIO/cgroups 代码中中断了初始化循环。
- 修复了
PointsToAnalysisMethod.getContextInsensitiveVirtualInvoke
中的瞬态保证失败。 - 改进了 JFR 支持:切换到
PlatformThreads.getCurrentThreadOrNull()
而非Thread.currentThread()
;修复了JVM.commit(long)
中的竞态条件。 - 确保为需要
FrameInformation
的方法生成DeoptTargets
。 - 现在 Native Image 构建器使用同步数据结构进行可达性处理器注册。
- 添加了异步信号安全的方式来转储崩溃日志。
- 添加了一个选项,可以人为地增加头部大小。
- 修复了用于 Native Image 崩溃日志的堆栈遍历启发式问题。
- 修复了 Windows 上的
joinThreadUnmanaged
问题。 - 对
__svm_version_info
使用了供应商版本。 - 使构建器对
AccessControlContext
堆栈使用ThreadLocal
。 - 修复了 MANIFEST 文件包含“Class-Path”属性时的类路径顺序问题。
- 添加了对镜像运行时执行引导方法以及对镜像运行时“常量动态”执行的支持。
- 当异常处理失败时,Native Image 现在会打印崩溃日志。
- 修复了带空值的
arraycopy
的clinit
模拟问题。 - 仅在已注册的情况下将签名者包含在原生可执行文件中。
- 对于使用
@Unknown*Field
注解的字段,不要使用影子堆。
- Truffle 框架修复
- 处理存储在错误位置的 *json-23.1.0.jar* *native-image.properties*。
- 将 JSON 解析库 org.json 升级到 20231013 版本。
- 修复了在 Sulong 上运行的平台中,生成 Espresso 上下文时的回归问题。
- 修复了运行时编译中未链接类型的处理问题。
- 默认禁用了类路径隔离。
- 添加了针对未链接的多语言版本检查。
- 添加了断言触发器检查,该检查会失败并抛出异常。
- 工具
- 添加了强制性的实验属性
debuggerId
,并处理了对 /json/list 路径的 GET 请求。
- 添加了强制性的实验属性
- Javascript
- 将 Node.js 更新到 18.18.2 版本后,更新了预期的 Node.js 结构。
- 防止在主机调用关闭时,明确进入的上下文自动离开。
- LLVM
- 如果使用 Xcode 15 构建,LLVM 初始化会失败。
- 当 IO 访问被拒绝时,Sulong 库加载出现回归。
- Truffle 上的 Java (Espresso)
- 移除了
EspressoForeignList
中对外部字段的需求。 - 在 Maven 上添加了缺失的 Espresso 工件。
- 修复了
ToEspresso
集合类型节点无法处理 Espresso 对象的问题。 - 修复了外部异常和自定义类型转换器的类型转换器组合问题。
- 移除了
- Python
- 修复了 Python JVM 独立版仅在 GraalVM 社区版上运行的问题。
- WebAssembly
- GraalWasm 的文件系统访问。
- TRegex
- 添加了 OracleDB 版本。
- GraalVM 集成
- 修复了已部署工件的列表。
- 没有目标调用的 Lambda。
GraalVM for JDK 21.0.1
(2023-10-24)
这是 GraalVM 社区版 的 2023 年 10 月关键补丁更新 (CPU)。它基于 OpenJDK CPU,包含作为该 CPU 一部分发布的所有 OpenJDK 安全修复、平台更新以及一些 GraalVM 错误修复。这是一个完整的分发版,取代了之前发布的 GraalVM 社区版 for JDK 21。
- 将 GraalVM 社区版 for JDK 21 更新至 **21.0.1+12**。请参阅 OpenJDK 21 Updates。
- 版本兼容性
- Truffle 语言及其他组件 版本 **23.1.1** 专为 **GraalVM for JDK 21.0.1** 设计。
- 编译器修复
- 更改了常数盲化,以便在提前编译时使用
RuntimeRandomness
。 - 为 AArch64 架构的
BranchOp
添加了FarBranch
支持。
- 更改了常数盲化,以便在提前编译时使用
- Native Image 修复
- 修复了取消提交未使用内存时进程崩溃的问题。
- 如果无法确定堆栈边界,则添加了
CEntryPointError
。 - 移除了不再需要的 JDK 特定 Java Flight Recorder 代码。
- 修复了在 macOS 上使用
ProcessBuilder
时偶尔发生的崩溃问题。
适用于 JDK 21 的 GraalVM
(2023-09-19)
- 平台和分发版
- 已移除功能
- Java 和编译器
- Native Image
- 多语言嵌入
- JavaScript 和 Node.js
- Truffle 上的 Java
- Python
- Ruby
- WebAssembly
- LLVM
- Truffle 语言和工具实现
平台和分发版
- 发布了基于 OpenJDK 21 的 **GraalVM 社区版 for JDK 21**。请参阅 OpenJDK 21 Updates。
- 发布了基于 Oracle JDK 21 的 **Oracle GraalVM for JDK 21**。请参阅 Java SE 21 发行说明。
- 语言运行时现已作为独立分发版发布,因此 GraalVM JDK 中不再包含语言启动器。Oracle GraalVM 和 GraalVM 社区版均提供两种独立语言运行时选项:Native Image 编译的原生启动器或基于 JVM 的运行时(已包含)。为了区分 GraalVM 版本,GraalVM 社区版名称中带有
-community
后缀,例如:graaljs-community-<version>-<os>-<arch>.tar.gz。
为了区分运行时模式,JVM 独立类型名称中带有-jvm
后缀。独立分发版可在 GitHub 上相应的语言仓库中获取。在此处了解更多信息:这里。
已移除功能
- 移除了 GraalVM Updater (
gu
),它曾用于通过修改安装目录来扩展 GraalVM 安装,添加 GraalVM 语言运行时及其他组件。作为与 OpenJDK 对齐的一部分,修改 JDK 安装并不常见。要继续使用 GraalVM 语言运行时及其他组件,请使用语言独立版或在项目中将其指定为 Maven 或 Gradle 依赖项。有关更多信息,请参阅多语言嵌入更新和GitHub issue #6855。 - 移除了选项
--language:<language>
(用于在构建时启用特定的语言运行时)和一些宏选项。有关详细信息,请参见下文。
Java 和编译器
- 实现了 Java Vector API (JEP 338) 操作的初步优化。加载、存储、基本算术、归约、比较和混合操作在可能的情况下被转换为高效的机器指令。它默认启用,并可以通过
-Dgraal.OptimizeVectorAPI=false
禁用。此优化在 GraalVM 社区版中不可用,在 GraalVM Native Image 中也尚未提供。未来计划覆盖更多操作并支持 Native Image。此优化为实验性功能。 - 为 Graal 编译器在 AMD64 和 AArch64 架构上实现了 JDK 21 之前的所有内部函数。我们还将各种 HotSpot 汇编存根移植到 Java 中,包括所有 SHA 消息摘要存根和部分
BigInteger
算术计算存根。这使得 Native Image 能够受益于这些高性能汇编代码。 - 用户可以通过设置
-XX:UseBranchProtectionHotSpot
选项在 Graal 编译器中启用反向边 CFI。无论用户提供标准保护还是 PAC-RET 保护,Graal 编译器在 AArch64 架构上运行时都将自动启用反向边 CFI。在函数返回之前,Graal 编译器会发出一个认证指令,检查已签名返回地址的完整性。如果此完整性检查失败,认证指令会将损坏地址的高位(保留用于指针认证代码 (PAC))标记,以使指针失效。当函数返回到损坏的指针时,操作系统将引发 SIGSEGV 信号,因为损坏的指针现在指向一个无效(例如,未映射)的地址。即使攻击者完全控制了存储的返回地址,认证指令也会通过将攻击者提供的任何内容重置到进程地址空间中的随机高位点来夺回控制权。在此处了解更多关于UseBranchProtection
的信息:这里。 - 以下 JDK 21 功能不可用
- JEP 439 分代 ZGC
Native Image
新功能
- 用户现在可以在 Linux AArch64 架构上使用 G1 垃圾收集器来构建高效的、具有大堆和最小暂停时间的原生可执行文件(在 GraalVM 社区版中不可用)。此前,它仅适用于 Linux AMD64。要启用它,请将选项
--gc=G1
传递给native-image
构建器。在此处了解更多关于 Native Image 中的内存管理。 - 引入了一种新的类初始化方法,该方法将在未来成为默认设置:现在,所有类都允许在构建时使用和初始化,无论类初始化配置如何。对于配置为
--initialize-at-run-time
的类,这意味着它们将在运行时再次显示为未初始化。要启用新方法,请将--strict-image-heap
标志传递给 Native Image。有关更多信息和实现细节,请参阅提案 #4684。请注意,存在一个已知问题:不符合新策略的构建将失败,并显示以下错误:Boolean option value can be only + or -
。这将在 2023 年 10 月 24 日的补丁发布中解决,我们将在即将发布的博客文章中分享有关新策略和最佳实践的更多详细信息。 - 改进了缺失元数据的报告方式,在尝试创建未在构建时注册的
Proxy
类时,抛出MissingReflectionRegistrationError
而不是VMError
。 - 为
native-image
构建器添加了优化级别 3,以实现最佳峰值性能(在 GraalVM 社区版中不可用)。此新级别包含以前属于优化级别 2 的优化,并与 配置文件引导优化 结合使用时效果最佳。因此,使用默认的-O2
进行构建时的编译时间显著减少。此外,--pgo
选项会自动启用-O3
。 - 在 Native Image 中添加了对外部下行调用(OpenJDK Panama 项目)的实验性支持。请测试并提供反馈。未来计划支持上行调用。
-
添加了选项
--parallelism
,用于控制 Native Image 构建过程使用的线程数。最小数量为 2。此选项对于资源受限的构建环境非常有用。此外,从本发布版开始,构建输出将打印出构建过程的内存和线程限制,例如Build resources: - 13.24GB of memory (42.7% of 31.00GB system memory, determined at start) - 16 thread(s) (100.0% of 16 available processor(s), determined at start)
- 添加了选项
--color[=WHEN]
用于彩色化构建输出。将WHEN
替换为always
(总是)、never
(从不)或auto
(自动)。此 API 选项取代了实验性选项-H:+BuildOutputColorful
。 - 引入了一个新选项
-H:±UnlockExperimentalVMOptions
,用于在 Native Image 中显式解锁对实验性选项以及大多数托管选项(以-H:
开头)的访问。如果未明确请求访问,则在此版本中,尝试使用任何实验性选项都将导致构建失败并显示可操作的错误消息。此外,为了帮助用户了解哪些依赖项请求了这些选项,活跃的实验性选项将作为构建输出的一部分与其来源一起列出。在下一个版本中,此警告将变为构建失败。同时,如果某些实验性选项应提升为公共 API 并标记为稳定,鼓励社区提交问题。有关更多信息,请参阅GitHub issue #7105。 - 以下 JDK 21 功能不可用
调试和监控改进
- 改进了监控体验:添加了对 Java Flight Recording
ThreadCPULoad
事件的支持。(与 BellSoft 合作。) - 添加了对
-XX:+HeapDumpOnOutOfMemoryError
的支持。(与 Red Hat 合作。)
在更改日志中查看完整的更新列表。
重构 GraalVM SDK
GraalVM SDK 被拆分为四个细粒度模块。graalvm-sdk
模块的使用现已弃用。请注意,在此版本中,所有 GraalVM API 仍然兼容。以下新模块可用:
org.graalvm.nativeimage
: 适用于高级用例的 Native Image 公共 API。org.graalvm.polyglot
: 一个允许在 Java 中嵌入多语言实现的库。org.graalvm.word
: 一个用于 Java 中机器字大小值的低级库。org.graalvm.collections
: 一个用于 GraalVM 组件的集合库。
相应地更新您的 Maven 和模块依赖项。如果您之前通过以下方式使用 GraalVM SDK for Native Image:
<dependency>
<groupId>org.graalvm.sdk</groupId>
<artifactId>graal-sdk</artifactId>
<version>23.1.0</version>
</dependency>
现在您可以使用:
<dependency>
<groupId>org.graalvm.sdk</groupId>
<artifactId>nativeimage</artifactId>
<version>23.1.0</version>
</dependency>
多语言嵌入器现在可以使用:
<dependency>
<groupId>org.graalvm.polyglot</groupId>
<artifactId>polyglot</artifactId>
<version>23.1.0</version>
</dependency>
有关更多详细信息,请参阅多语言嵌入更新。
在GraalVM SDK 更改日志中查找完整的更新列表。
多语言嵌入
- 将所有 GraalVM 语言工件转换为多语言嵌入器的标准 Maven 依赖项(参见#6852)。以前,要在嵌入中使用 GraalVM 语言,您必须使用 GraalVM Updater 工具(例如
gu install python
)安装它。现在要启用语言,语言工件需要位于 Java 模块或类路径上。 graalvm-sdk
模块的使用现已弃用;请改用org.graalvm.polyglot:polyglot
工件。org.graalvm.polyglot
模块不再默认包含在 GraalVM JDK 中。要在 Java 中启用语言嵌入,请将该语言指定为依赖项。如果您的多语言应用程序需要 Truffle 工具,也请通过依赖项启用它们。以下是 Maven 配置示例:<dependency> <groupId>org.graalvm.polyglot</groupId> <artifactId>polyglot</artifactId> <version>23.1.0</version> </dependency> <dependency> <groupId>org.graalvm.polyglot</groupId> <!-- Select the language --> <artifactId>js|python|ruby|wasm|llvm|java</artifactId> <version>23.1.0</version> <type>pom</type> </dependency> <dependency> <groupId>org.graalvm.polyglot</groupId> <artifactId>tools</artifactId> <version>23.1.0</version> <type>pom</type> </dependency>
这些依赖项使用基于 Oracle GraalVM 构建的语言和工具。要使用 GraalVM 社区版,请将
-community
后缀添加到artifactId
,例如js-community
。有关更多详细信息,请参阅更新的嵌入语言文档。-
移除了选项
--language:<language>
(用于在构建时启用特定的语言运行时)以及一些宏选项,具体如下:--macro:polyglot-launcher --macro:polyglot-library --macro:truffle --macro:truffle-language-library
它们不再需要,因为将它们放在类路径/模块路径上就可以完成所有必要操作。
更多更新可在更改日志中找到。
JavaScript 和 Node.js
- 发布了 JavaScript (GraalJS) 和 Node.js 运行时作为独立分发版。Oracle GraalVM 和 GraalVM 社区版均提供两种独立语言运行时选项:Native Image 编译的原生启动器或基于 JVM 的运行时(已包含)。为了区分它们,GraalVM 社区版名称中带有
-community
后缀:graaljs-community-<version>-<os>-<arch>.tar.gz。
、graalnodejs-community-<version>-<os>-<arch>.tar.gz。
。带有 JVM 的独立版名称中带有-jvm
后缀。独立分发版可在GitHub 上获取。 - 用于运行 JavaScript 的
ScriptEngine
实现不再随 GraalVM 提供。请迁移您的设置,以显式依赖ScriptEngine
模块并将其添加到模块路径。有关详细信息,请参阅ScriptEngine 文档。 - 要启用 JavaScript 运行时,您不再需要使用
gu install js
进行安装(因为 GraalVM Updater 已移除),而是将其作为 Maven 依赖项添加(参见下文),或显式地将 JAR 放在模块路径上。用于在 Java 中嵌入 JavaScript 的 Maven 依赖项也已更新。以下是 JavaScript 嵌入的 Maven 配置:<dependency> <groupId>org.graalvm.polyglot</groupId> <artifactId>polyglot</artifactId> <version>23.1.0</version> </dependency> <dependency> <groupId>org.graalvm.polyglot</groupId> <artifactId>js</artifactId> <version>23.1.0</version> <type>pom</type> </dependency>
它启用了 Oracle GraalVM JavaScript 运行时。要改用社区许可版本,请为每个工件添加
-community
后缀(例如,js-community
)。请参阅语言嵌入的依赖项设置。 - 默认启用了 ECMAScript 2023 功能。
- 实现了新提案
- 异步上下文 (Async Context),可通过实验性选项
--js.async-context
启用。 - String.dedent,可在 ECMAScript 暂存模式下通过
--js.ecmascript-version=staging
选项启用。
- 异步上下文 (Async Context),可通过实验性选项
- 将 Node.js 更新至 18.17.1 版本。
在项目更改日志中查找更多更新。
Truffle 上的 Java
- Java on Truffle (Espresso) 不再随 GraalVM 提供,而是作为单独的独立分发版和 Maven 工件提供。提供两种独立选项:Oracle GraalVM 和 GraalVM 社区版(包含原生启动器)。为了区分它们,GraalVM 社区版在名称中带有
-community
后缀:espresso-community-<version>-<os>-<arch>.tar.gz。
请参阅Java on Truffle 入门。独立分发版可在GitHub 上获取。 - 要启用 Java on Truffle,您不再需要使用
gu install espresso
进行安装(因为 GraalVM Updater 已移除),而是将其作为 Maven 依赖项添加(参见下文),或显式地将 JAR 放在模块路径上。<dependency> <groupId>org.graalvm.polyglot</groupId> <artifactId>polyglot</artifactId> <version>23.1.0</version> </dependency> <dependency> <groupId>org.graalvm.polyglot</groupId> <artifactId>java</artifactId> <version>23.1.0</version> <scope>runtime</scope> <type>pom</type> </dependency>
它启用了 Oracle GraalVM Java on Truffle 运行时。
- 添加了选项
--enable-preview
。
在项目更改日志中查找更多更新。
Python
-
发布了 Python 运行时 (GraalPy) 作为独立分发版和 Maven 工件(参见下文)。Oracle GraalVM 和 GraalVM 社区版均提供两种独立语言运行时选项:Native Image 编译的原生启动器或基于 JVM 的运行时(已包含)。为了区分它们,GraalVM 社区版名称中带有
-community
后缀:graalpy-community-<version>-<os>-<arch>.tar.gz。
带有 JVM 的独立版名称中带有-jvm
后缀。请参阅GraalPy 入门。您也可以使用
pyenv
安装 GraalPy 社区独立版# To install GraalPy Community Edition pyenv install graalpy-community-23.1.0
独立分发版可在GitHub 上获取。
- 要启用 GraalVM Python 以嵌入到 Java 中,请将其添加为 Maven 依赖项或显式地将 JAR 放在模块路径上。以下是 Python 嵌入的 Maven 配置:
<dependency> <groupId>org.graalvm.polyglot</groupId> <artifactId>polyglot</artifactId> <version>23.1.0</version> </dependency> <dependency> <groupId>org.graalvm.polyglot</groupId> <artifactId>python</artifactId> <version>23.1.0</version> <type>pom</type> </dependency>
- GraalPy 现已适用于 Windows 用户。GraalPy 可以在 Windows 上使用
venv
或pip
工具安装,并支持使用原生 MSVC 工具链编译和执行 C 扩展。 - 改进了 GraalPy 独立工具:您现在可以为 Linux、Windows 和 macOS 构建单文件可执行的 Python 二进制文件。该工具还可以生成一个骨架 Maven 项目,用于设置 Python 包到 Java 的多语言嵌入。
- 添加了对
sqlite3
模块的支持。这使得许多包,如 Coverage 或 Flask-SQLAlchemy,可以在嵌入式数据库之上工作。
在项目更改日志中查找更多更新。
Ruby
- 更新至 Ruby 3.2.2。
- 基于 Oracle GraalVM Native Image 构建的 Linux 版 TruffleRuby 独立版现在支持 G1 垃圾收集器,这提供了显著更好的运行时性能。
- TruffleRuby
ScriptEngine
实现已被移除,取而代之的是 GraalVM 中的通用ScriptEngine
。
在项目更改日志中查看完整的更新列表。
WebAssembly
- 发布了 GraalVM WebAssembly 运行时作为独立分发版。Oracle GraalVM 和 GraalVM 社区版均提供两种独立语言运行时选项:Native Image 编译的原生启动器或基于 JVM 的运行时(已包含)。为了区分它们,GraalVM 社区版名称中带有
-community
后缀:wasm-community-<version>-<os>-<arch>.tar.gz。
带有 JVM 的独立版名称中带有-jvm
后缀。请参阅WebAssembly 入门。独立分发版可在GitHub 上获取。 - 实现了 扩展常量表达式 提案。该功能可以通过选项
--wasm.ExtendedConstExpressions=true
启用。 - 添加了在 Wasm 模块中启用多个内存的选项:
--wasm.MultiMemory=true
。
LLVM
- GraalVM LLVM 运行时不再随 GraalVM 提供,而是作为单独的独立分发版提供。它默认包含 LLVM 工具链。Oracle GraalVM 和 GraalVM 社区版均提供两种独立语言运行时选项:Native Image 编译的原生启动器或基于 JVM 的运行时(已包含)。为了区分它们,GraalVM 社区版名称中带有
-community
后缀:llvm-community-<version>-<os>-<arch>.tar.gz。
带有 JVM 的独立版名称中带有-jvm
后缀。请参阅LLVM 入门。独立分发版可在GitHub 上获取。 - 将 LLVM 工具链更新至 16.0.1 版本。
- 添加了
flang
工具链包装器,以支持 Fortran 嵌入位码编译。
Truffle 语言和工具实现
- Truffle 语言和工具的实现使用基于 Java 模块的隔离从嵌入器中分离。这意味着它们已迁移到 Java 模块,以防止意外使用内部 API。有关 Truffle 语言和工具所需的模块化的详细信息,请参阅此文档。
- 为 Truffle 语言和工具实现了内部资源 API,以便能够从应用程序模块路径惰性解包和消耗执行所需的资源。此 API 取代了“语言主目录”的概念。对于需要额外文件才能执行的语言或工具,它需要遵循以下步骤:
- 将必要文件打包到独立分发版 (JAR) 中。
- 实现
InternalResource
接口,用于处理资源文件的解包。 - 当语言或工具需要捆绑的资源文件时,调用
Env#getInternalResource
方法。此方法确保所请求的InternalResource
被解包,并提供一个包含解包文件的目录。由于解包内部资源可能是一项耗费资源的操作,因此该实现确保内部资源被缓存。
- Truffle 语言或工具现在从应用程序模块路径加载,这与以前在 GraalVM JDK 上使用
-Dtruffle.class.path.append
提供它们的方式不同。Truffle 类路径已弃用,不应再使用。语言现在需要能够作为命名模块运行,因此语言需要进行迁移。语言仍然可以从类路径加载,但 Truffle 会在内部将其加载到自己的类加载器和模块层中,因此它们需要成为模块。 - 改进了 Ideal Graph Visualizer 转储体验
- IR 转储:Truffle 的文件夹现在包含编译层,以更好地区分编译。如果转储级别 >= 2,内联 IR 图现在还会额外转储到单独的文件夹中。
- AST 转储:Truffle AST 现在作为 IR 转储文件夹的一部分进行转储。转储的 AST 树现在在一个树中显示所有内联的 AST。可以使用 IGV(顶部状态栏)中的“集群节点”功能对单个函数进行分组。根节点现在显示其名称。每个 AST 节点现在都具有一个
graalIRNode
属性,如果存在,该属性允许查找相应的 Graal IR 常量。
在Truffle 更改日志中查找完整的更新列表。