19.1.1

(2019-07-16)

这是针对 GraalVM 19.1.0 版本的关键补丁更新 (CPU) 版本,其基础 JDK 已更新至 OracleJDK 8u221 和 OpenJDK 8u222。更多详细信息可在此处(此处)和此处(此处)找到。我们建议从 19.1.x 及更旧版本升级到此版本。

此 CPU 版本包含以下 CVE 的修复

  • CVE-2019-2813
  • CVE-2019-2862

更多信息请参见Oracle 2019 年 7 月安全公告

此版本还包含了以下 GraalVM Native Image 的关键修复

  • 修复了 Reflection.getCallerClass 方法有时在原生镜像中无法获取正确帧的问题 (#1479)。

  • 修复了提前编译共享库时工作目录中可能不生成头文件的问题。

19.1.0

(2019-07-02)

这是一个功能发布版本,我们建议从 19.0.x 版本升级到此版本。

Java

  • 提高了 GraalVM 中即时 (JIT) 编译的速度,显著提升了中等长度工作负载的性能。
  • 在构建编译器的提前 (AOT) 镜像时应用了配置文件引导优化 (PGO)。这使得编译器本身能够进行更激进的优化,从而提供更好的编译吞吐量。

原生镜像

我们修复了 GitHub 上报告的许多问题。您可以在此处浏览完整列表。

JavaScript

  • 添加了实验性选项 js.locale 以设置区域敏感操作的默认区域。
  • 允许通过在 URL 前加上 internal: 前缀(例如 //# sourceURL=internal:myname.js)使用 sourceURL 指令将评估的源标记为内部。
  • 改进了跨线程的代码共享。在此之前,一个上下文必须关闭,其中的代码才能在另一个上下文中重用,现在对于 JavaScript 上下文,可以在不关闭上下文的情况下使用 ContextPolicy.SHARED 共享代码。在以下示例中,source 代码在 context1context2 之间共享
public static void main(String[] args) {
        try (Engine engine = Engine.create()) {
            Source source = Source.create("js", "21 + 21");
            try (
              Context context1 = Context.newBuilder().engine(engine).build();
              Context context2 = Context.newBuilder().engine(engine).build()) {
                context1.eval(source).asInt();
                context2.eval(source).asInt();
            }
        }
    }

LLVM 解释器

  • 在嵌入式上下文中调用 exit(...) 现在是一个可捕获的 PolyglotException
  • 跳过不允许访问的源路径条目。以前,当在对文件系统访问受限的嵌入式上下文中运行时,即使没有附加调试器,LLVM 引擎在无法读取源文件时也会抛出异常。现在它将继续运行。只有当附加了调试器时,如果源文件无法访问,才会报告错误。

Ruby

此版本中的 GraalVM Ruby 实现旨在改进性能和兼容性、实现新功能和修复多个错误。最值得注意的包括

  • 交互式源(如 GraalVM 多语言 shell)现在都共享相同的绑定 (#1695)。
  • 哈希码计算已改进,以减少 Hash 和其他情况的哈希冲突。
  • 包含块的固定代码的 eval(code, binding) 现在快得多。这提高了包含循环的 ERB 模板渲染性能。
  • rb_str_cat 由于 C 字符串现在可以直接连接而无需先转换为 Ruby 字符串或检查其编码,因此速度更快。

Ruby 组件的完整更新日志可在 GitHub 上找到。

R

  • 字符串 -Inf+NaN-NaN 可以正确解析为双精度浮点数,包括忽略前导和尾随空格。
  • 即使没有迭代,for 循环也会创建并初始化控制变量 (#77)。
  • 更新了 capabilities 内置函数的输出 (#78)。
  • is.function 对外部可执行文件返回 true

完整的项目更新日志可在 GitHub 上找到。

Python

  • Python 标准库文件从 3.7.0 更新到 3.7.3。
  • 改进了未逸出的异常的性能。
  • 修复了在原生镜像中使用预初始化上下文进行预构建镜像和 libpolyglot 快速启动时核心源的缓存问题。
  • 实现了对 pwd.getpwuidos.execos.execvos.execl 模块的支持。

要查看完整的更改列表,请参阅项目更新日志

联系我们