20.0.0

(2020-02-18)

GraalVM 平台更新

GraalVM 20.0 显著改进了之前适用于 Windows 平台的 GraalVM 构建版本。Windows 在 GraalVM 生态系统中不再是一个实验性平台。Windows 构建版本现在包含功能齐全的 gu 工具来安装组件。GraalVM Native Image 组件需要像在其他平台上一样使用 gu 进行安装。JavaScript 引擎现在已包含在 GraalVM Windows 分发版中。Windows 平台上的 Node.js 支持计划包含在下一个 GraalVM 版本(20.1)中。

GraalWasm,即 WebAssembly 组件,通过常规组件分发渠道发布。

适用于 AArch64 的 GraalVM 分发版现在包含功能齐全的 node.js 运行时(包括 --jvm 模式和原生模式)。

Java

  • GraalVM 社区版基于 OpenJDK 1.8.0_242 和 OpenJDK 11.0.6。
  • GraalVM 企业版基于 Oracle JDK 1.8.0_241 和 Oracle JDK 11.0.6。您可以在 Oracle 技术网络网站上找到 JDK 发布说明。
  • 新增了 Jump Conditional Code (JCC) Erratum 的缓解措施(参见 #1829)。
  • GraalVM 的默认设置为 ThreadPriorityPolicy=1,这意味着在 Java 中设置的线程优先级会反映到原生操作系统线程优先级。这可能会影响 Java 应用程序性能。

Native Image

  • Windows 上的 Native Image 支持已取得显著进展。如果您发现任何问题,请报告。
  • 使用 GraalVM Enterprise 构建的 Native Image 现在可以包含基于 G1 的低延迟垃圾回收器,该回收器减少了全局暂停时间并提高了延迟。这是一个实验性功能,可以通过 -H:+UseLowLatencyGC 在镜像构建时启用。有关更多详细信息,请参阅文档
  • 修复了几个与 Java Native Interface (JNI) 和 JDK11 相关的问题,更多信息请参阅 GitHub

JavaScript

  • Node.js 已更新到 12.15.0,请参阅 Node.js 12.15.0 发布说明
  • 添加了 js.commonjs-require 选项,用于从纯 JavaScript 加载兼容 npm 的 CommonJS 模块。这是一个实验性功能。有关详细信息,请参阅 NodeJSVSJavaScriptContext.md
  • 添加了 js.load-from-classpath 选项,允许通过 classpath: 伪 URL 从类路径加载文件(默认禁用)。不建议将其用于不可信的代码。
  • 添加了 String.prototype.replaceAll 提案的实现。它在 ECMAScript 2020 模式下可用(--js.ecmascript-version=2020)。
  • 更新了 String.prototype.matchAll,使其仅在 ECMAScript 2020 模式下可用(--js.ecmascript-version=2020)。
  • 添加了 js.bind-member-functions 选项,用于将 Value.getMember 返回的未绑定函数隐式绑定到接收器。调用成员的首选方式是使用 Value.invokeMember
  • 使 Nashorn 伪 URL 支持仅在 Nashorn 兼容模式下可用(--js.nashorn-compat)。
  • 实现了对公共和私有类字段的支持,包括静态字段。此功能可以使用实验性选项 js.class-fields 启用,并且在 Node.js 中默认可用。
  • 为非标准 arguments 全局属性添加了 js.global-arguments 选项,默认值为 true

更多详细信息可以在 GitHub 上的项目更新日志中找到。

LLVM 运行时

  • 工具链现在基于 LLVM 9.0.0。
  • 支持通过工具链访问 llvm-arllvm-nmllvm-objcopyllvm-objdumpllvm-ranlibllvm-readelfllvm-readobjllvm-strip

更多详细信息请参阅 GitHub 上的组件更新日志

Python

  • 通过实现语法 from JavaType import * 来导入 Java 类的所有静态成员,以及通过将 path/to/jarfile.jar!path/inside/jar 添加到 sys.path 来从 JAR 文件内部导入 Python 代码,改进了 Jython 兼容性。
  • 增加了对日期和时间互操作的支持。
  • 增加了通过 Context.Builder.timeZone 设置时区的支持。
  • 实现了 PEP 570 - Python 仅限位置参数。

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

R

  • 在 Linux 上,libgfortran 的所需版本从 3 更改为 5。有关详细信息,请参阅要求部分
  • 实现了通过数字和/或字符串矩阵对数组进行子集操作。
  • 修复了多语言值不是对象的问题(参见 #123)。
  • 修复了 sprintf %g%G 格式不正确的问题(尾随零,参见 #126)。
  • 添加了 R 内置函数和 C API。
    • stats 基本包移植了 nlm(参见 #100)和 fisher.test 使用的所有外部 C 函数。
    • 添加了 Rf_asS4 C API 函数(参见 #118)。

更多详细信息可以在 GitHub 上的项目更新日志中找到。

Ruby

Ruby 组件的详细更新日志可在 GitHub 上查阅。

  • 更新到 Ruby 2.6.5(参见 #1749)。
  • 更新了内部 LLVM 工具链到 LLVM 9,并减小了其下载大小。
  • 在 macOS 上编译 OpenSSL 时,根据需要自动设置 PKG_CONFIG_PATH(参见 #1830)。
  • 与 sockets 和 RSTRING_PTR 相关的性能改进。
  • 100+ 兼容性和错误修复,请参阅更新日志

GraalVM 嵌入器(SDK)的更改

  • 已弃用的 graalvm.homegraalvm.version 系统属性已移除,请改用 HomeFinder
  • 添加了 EventContext.createError,允许在执行监听器/节点中引入访客应用程序错误。
  • 添加了 Context.Builder.currentWorkingDirectory,用于设置访客应用程序解析相对路径时使用的当前工作目录。
  • 用于为没有 URI 的 Source 生成唯一 URI 的算法已更改为 SHA-256
  • 所有 Truffle Graal 运行时选项(-Dgraal.)将在 20.1 版本中弃用。Truffle 运行时选项不再作为 Graal 选项(-Dgraal.)指定。Graal 选项必须替换为使用 polyglot API 指定的相应引擎选项。TRUFFLE_STRICT_OPTION_DEPRECATION 环境变量可用于检测已弃用的 GraalVM 选项的使用。当 TRUFFLE_STRICT_OPTION_DEPRECATION 设置为 true 并且使用了已弃用的 Graal 选项时,Truffle 运行时将抛出异常,列出所使用的已弃用选项及其相应的替代品。

更多详细信息可在 SDKTruffle 更新日志中查阅。

工具

  • 添加了一个 gu 选项,用于从本地目录安装所有可用组件,例如:gu install -C /path/to/downloaded/20.0-components/ native-image llvm-toolchain ruby r python wasm
  • VisualVM 中添加了 JDK Flight Recorder 数据查看器。
  • 新增了 T-trace 检测框架与 OpenTracing 的集成。
  • T-trace 检测框架中添加了 LLVM 语言支持。
  • 添加了 GraalVM 语言的 Language Server Protocol 实现的技术预览版,以及其对 GraalVM VSCode 扩展的支持。

联系我们