GraalVM 用语言库取代了 GraalVM 更新程序

GraalVM 更新:Java 库取代 GraalVM Updater (gu)

Oracle Labs 宣布,从 GraalVM JDK 21 开始,Java 库将取代 GraalVM Updater (gu)gu 工具曾用于安装和管理 GraalVM 语言运行时及实用程序,但在 JDK 21 中已被移除,其功能将由多个 Java 库提供。

主要变化

  1. gu 工具的移除gu 最后一次支持是在 GraalVM JDK 20 中,用于安装如 Native Image 和 JavaScript 等包。从 JDK 21 开始,gu 被移除,相关功能由 Java 库替代。
  2. 多语言支持:Java 库不仅支持 Java,还支持 JavaScript、Node.js、Python、WebAssembly 和 Ruby 等其他语言。
  3. 向后兼容性:多语言 API 向后兼容,现有项目无需代码更改。

变更原因

  1. 升级复杂性:使用 gu 升级语言时,JDK 也需要升级,增加了升级过程的复杂性。
  2. 安装的不可变性gu 会更改安装内容,而系统和管理工具要求安装内容不可变,这导致 gu 难以使用。
  3. 语言启动器混淆:JDK bin 目录中的语言启动器(如 Python)对用户来说较为混淆。
  4. 语言依赖问题gu 无法让 Java 应用程序声明对其他语言(如 Python)的依赖。

Truffle 框架的松耦合

Truffle 框架现在与 JDK 解耦,语言运行时可通过 Maven Central 作为库使用。未来的语言运行时将向后兼容最新的长期支持 (LTS) 版本。独立语言下载现在取代了 JDK 中的独立语言启动器。GraalVM JDK 21 是运行时优化支持的必要条件。

安装与使用

要使用新库,需要安装 GraalVM。GraalVM 提供了适用于 Linux、macOS 和 Windows 的二进制文件,社区版二进制文件则使用限制较少的许可证。

示例应用

以下是一个在 Java 应用中集成 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-community</artifactId>
    <version>23.10</version>
    <type>pom</type>
</dependency>

Gradle 依赖如下:

dependencies {
    implementation("org.graalvm.polyglot:polyglot:23.1.0")
    implementation("org.graalvm.polyglot:js:23.1.0")
}

许可与互操作性

默认库使用 GraalVM 免费条款和条件 (GFTC) 许可,带有 -community 后缀的库则使用开源许可证。

库支持 Java 和 JavaScript 之间的互操作性,Java 代码可以从 JavaScript 中调用,JavaScript 也可以嵌入到 Java 程序中。以下是一个从 Java 应用程序调用 JavaScript 函数的示例:

static String JAVASCRIPT_CODE = "(function myFirstFunction(language) { console.log('Hello world from ' + language); } )";

public static void main(String[] args) {
    System.out.println("Hello world from Java!");
    try (Context context = Context.create()) {
        Value value = context.eval("js", JAVASCRIPT_CODE);
        value.execute("JavaScript!");
    }
}

运行结果如下:

Hello world from Java!
Hello world from JavaScript!

更多信息

更多关于 JavaScript 和 Java 互操作性的信息,以及其他语言(如 Python、R、Ruby、WebAssembly 和 LLVM)的信息,请参阅参考手册。有关最新变更的详细信息,请参阅 Christian Humer 撰写的 Truffle Unchained 博客文章。

阅读 29
0 条评论