20.0.0 #

(2020-02-18)

GraalVM Platform Updates #

GraalVM 20.0 improves significantly on the previously available GraalVM builds for Windows platforms. Windows is no longer an experimental platform in the GraalVM ecosystem. Windows builds now contain the functional gu utility to install the components. GraalVM Native Image component needs to be installed with gu as on other platforms. JavaScript engine is now included in the GraalVM Windows distribution. Node.js support on the Windows platform is scheduled to be included in the next GraalVM release (20.1).

GraalWasm, the WebAssembly component, is distributed through the usual component distribution channels.

The GraalVM distribution for AArch64 now includes a functional node.js runtime (both in --jvm and native modes).

Java #

  • GraalVM Community Editions are based on OpenJDK version 1.8.0_242 and OpenJDK version 11.0.6.
  • GraalVM Enterprise Editions are based on Oracle JDK version 1.8.0_241 and Oracle JDK version 11.0.6. You can find the JDK release notes at the Oracle Technology Network website.
  • Added mitigation of Jump Conditional Code (JCC) Erratum¬†(see #1829).
  • GraalVM has a default setting of ThreadPriorityPolicy=1, which means thread priorities set in Java are reflected by native operating sytstem thread priorities. This may affect Java application performance.

Native Image #

  • Native Image support on Windows has significantly advanced. Please report issues if you find any problems.
  • Native images built with GraalVM Enterprise can now include a G1-based low-latency garbage collector that reduces stop-the-world pauses and improves latency. It is an experimental feature that can be enabled at image build time with -H:+UseLowLatencyGC. For more details, please refer to the documentation.
  • Fixed several Java Native Interface (JNI) and JDK11 related issues, please refer to GitHub for more information.

JavaScript #

  • Updated Node.js to 12.15.0, please see Node.js 12.15.0 release notes.
  • Added the js.commonjs-require option to load npm-compatible CommonJS modules from plain JavaScript. This is an experimental feature. See NodeJSVSJavaScriptContext.md for details.
  • Added the js.load-from-classpath option to allow loading files from the classpath via the classpath: pseudo URLs (disabled by default). Its usage is not recommended with untrusted code.
  • Added the implementation of the String.prototype.replaceAll proposal. It is available in ECMAScript 2020 mode (--js.ecmascript-version=2020).
  • Updated String.prototype.matchAll to be available only in ECMAScript 2020 mode (--js.ecmascript-version=2020).
  • Added the js.bind-member-functions option for the implicit binding of unbound functions returned by Value.getMember to the receiver. The preferred way of calling members is using Value.invokeMember.
  • Made the support for Nashorn pseudo URLs available only in the Nashorn compatibility mode (--js.nashorn-compat).
  • Implemented support for public and private class fields, including static fields. This feature can be enabled using the experimental option js.class-fields and is available by default in Node.js.
  • Added the js.global-arguments option with true as a default value for the non-standard arguments global property.

More details can be found in the project changelog on GitHub.

LLVM Runtime #

  • The toolchain is now based on LLVM 9.0.0.
  • Support accessing llvm-ar, llvm-nm, llvm-objcopy, llvm-objdump, llvm-ranlib, llvm-readelf, llvm-readobj and llvm-strip via the toolchain.

For more details refer to the component changelog on GitHub.

Python #

  • Improved Jython Compatibility by implementing syntax from JavaType import * to import all static members of a Java class, and by enabling import of Python code from inside JAR files by adding path/to/jarfile.jar!path/inside/jar to sys.path.
  • Added support for date and time interop.
  • Added support for setting the time zone via Context.Builder.timeZone.
  • Implemented PEP 570 - Python Positional-Only Parameters.

To see a complete list of changes, please refer to the project changelog.

R #

  • On Linux, the required version of libgfortran changed from 3 to 5. See the requirements section for details.
  • Implemented subsetting an array by numeric and/or string matrix.
  • Fixed an issue where polyglot value is not an object (see #123).
  • Fixed an issue with the incorrect formatting for sprintf %g and %G (trailing zeroes, see #126).
  • Added R builtins and C APIs:
    • Ported all external C functions used by nlm (see #100) and fisher.test from the stats base package.
    • Added Rf_asS4 C API function (see #118).

More details can be found in the project changelog on GitHub.

Ruby #

A detailed changelog for the Ruby component is available on GitHub.

  • Updated to Ruby 2.6.5 (see #1749).
  • Updated the internal LLVM toolchain to LLVM 9 and reduce its download size.
  • Automatically set PKG_CONFIG_PATH as needed for compiling OpenSSL on macOS (see #1830).
  • Performance improvements related to sockets and RSTRING_PTR.
  • 100+ compatibility and bug fixes, please refer to the changelog.

Changes for GraalVM Embedders (SDK) #

  • The deprecated graalvm.home and graalvm.version system properties have been removed, use the HomeFinder instead.
  • Added EventContext.createError which allows to introduce guest application errors in execution listeners/nodes.
  • Added Context.Builder.currentWorkingDirectory to set the current working directory used by the guest application to resolve relative paths.
  • The algorithm used to generate a unique URI for a Source built without an URI was changed to SHA-256.
  • All Truffle Graal runtime options (-Dgraal.) will be deprecated with 20.1. The Truffle runtime options are no longer specified as Graal options (-Dgraal.). The Graal options must be replaced by corresponding engine options specified using the polyglot API. The TRUFFLE_STRICT_OPTION_DEPRECATION environment variable can be used to detect usages of deprecated GraalVM options. When the TRUFFLE_STRICT_OPTION_DEPRECATION is set to true and the deprecated Graal option is used, the Truffle runtime throws an exception listing the used deprecated options and corresponding replacements.

More details are in the SDK and Truffle changelogs.

Tooling #

  • Added an option for gu to install all available components from a local directory, for example: gu install -C /path/to/downloaded/20.0-components/ native-image llvm-toolchain ruby r python wasm.
  • Added a JDK Flight Recorder Data Viewer to VisualVM.
  • Added an integration of T-trace instrumentation framework with OpenTracing.
  • Added LLVM languages support to T-trace instrumentation framework
  • Added a Technology Preview of the Language Server Protocol implementation for GraalVM languages and its support to GraalVM VSCode Extensions.