This is a bug fix release for the GraalVM 21.0.x branch. It contains operational changes to GraalVM Updater - a tool for installing optional GraalVM language runtimes and utilities, and for updating your local GraalVM installation.
- Enhanced the upgrading policies to prevent components not being upgraded when migrating from GraalVM Community to GraalVM Enterprise Edition (
gu upgrade --edition ee).
- Improved handling the license acceptance by
guwhen a user is prompted to accept “Oracle GraalVM Enterprise Edition Native Image License”.
Updated the underlying JDK GraalVM is built on:
- GraalVM Community Edition is based on OpenJDK version 1.8.0_282 and OpenJDK version 11.0.10.
- [GraalVM Enterprise] Oracle GraalVM Enterprise Edition is based on Oracle JDK version 1.8.0_281 and Oracle JDK version 11.0.10. You can find Oracle JDK release notes for these versions at Oracle Java SE Downloads.
Java on Truffle
- Added an experimental Java Virtual Machine implementation based on a Truffle interpreter. Read more here.
As of this version, we provide GraalVM distributions for Linux on AArch64 system. All components including the GraalVM core are experimental. GraalVM Enterprise Edition is based on Oracle JDK11 for AArch64, and GraalVM Community Edition on OpenJDK 11 for AArch64 architecture accordingly.
- Added serialization support for Native Image. The serialization support ensures constructors for classes are contained in a native image, so that they can be deserialized in the first place. These classes should be whitelisted in an additional specific configuration file, similar to the Reflection continuation, as some classes cannot be deserialized, including classes that might be part of the native image, but not listed in the configuration file. You can either create a configuration file manually or apply a Tracing Agent, provided with GraalVM, to help writing the configuration files.
- Added method handle invocation support for Native Image (see #2761). Methods and fields accessed through method handles have to be registered in the Reflection configuration file. Also added method handles support to the Tracing agent to automatically generate the configuration for the native image build. Most use cases of method handles are supported. VarHandles that are not stored in static fields are still not supported.
- Added AWT and Swing support for the Linux platform (configuration collection with the Tracing agent is necessary).
- Added the experimental
-H:+InlineBeforeAnalysisoption to reduce the number of required configuration entries and lessen the image size.
- Improved the Tracing agent: it now captures instances of
- Improved the
ServiceLoaderFeatureclass to scan for services declared using modules.
- Disallowed the instances of
Randomin the native image heap.
- Improved GC performance (less time spent in GC).
Updates for Language and Tool Implementers Using Truffle API
- Fixed many issues related to multi-tier compilation. Multi-tier compilation (
--engine.MultiTier) will be enabled by default in 21.1.
HostCompilerDirectivesfor directives that guide the host compilations of the Truffle interpreters:
HostCompilerDirectives.BytecodeInterpreterSwitchto denote methods that contain the instruction-dispatch switch in bytecode interpreters
HostCompilerDirectives.BytecodeInterpreterSwitchBoundaryto denote methods that do not need to be inlined into the bytecode interpreter switch
- Truffle DSL generated nodes are no longer limited to 64 state bits. Use these state bits responsibly.
- More changes are listed in the changelog.
Updates for Polyglot Embedders
- Added support for explicitly selecting a host method overload using the signature in the form of comma-separated fully qualified parameter type names enclosed by parentheses (e.g.,
- Deprecated the host method selection by JNI mangled signature, replaced by the aforementioned new form. Scheduled for removal in 21.2.
- Updated Node.js to version 12.20.1.
- Enabled the following ECMAScript 2021 mode/features by default:
- Class fields
- Logical Assignment Operators
- Adopted a new interop exception handling and made JS exceptions extend the
- Implemented the relative indexing method proposal. It is available in ECMAScript 2022 mode (
- Added the
jarraymodule for compatiblity with Jython.
- Improved the support for Pandas and added the initial support for the Matplotlib visualization library.
- Provided fixes to avoid possible memory leaks and crashes when running NumPy in a shared engine.
- Fixed an infinite continuation prompt in REPL when pasting snippets.
More details can be found in the changelog.
- The new IRB is quite slow when copy/paste code into it. This is due to an inefficient
io/consoleimplementation which will be addressed in the next release. A workaround is to use
irb --readline, which disables some IRB features but is much faster for copy/pasting code.
- Updated to Ruby 2.7.2. Most Ruby 2.7 features and changes are implemented (see #2004).
- Fixed setting of special variables in enumerators and enumerables (issue #1484).
- Fixed issue with
Method#to_procand special variable storage (issue #2156).
**kwargsnow accept non-Symbol keys like Ruby 2.7.
- Refactor and implement more performant
- Refactor and implement more performant
String#inspectis now more efficient.
InteropLibrarymessages are now exposed consistently as methods on
Truffle::Interop(see #2139). Some methods were renamed to match the scheme described in the documentation.
- More details are available from the changelog.
AssertionErrorwhen trying to install the R validate package (issue #169).
- Improved the AST sharing, and support for the auxiliary engine caching. On top of the regular AST sharing that allows sharing code between multiple contexts in a single engine, this allows persisting of shared code across process boundaries.
- Added support for the current major release of macOS (macOS Big Sur).
- Added a deprecation warning for the old header files locations
llvm/api/toolchain.h. These header files have been already deprecated in 20.3.0, but without a warning.
- This release included a large number of bugfixes in semantics, linking and in-module validation. GraalVM’s WebAssembly interpreter now passes almost all tests from the official specification test suite.
Polyglotbindings that are needed for the JS-to-WebAssembly Interface API.
- Optimized the GraalWasm interpreter, leading to warmup and an overall 20x peak performance improvement of the interpreted execution mode.
- Improved the security by using the byte-buffer-based memory instead of the off-heap memory.
Starting from version 21.0, GraalVM Updater has become more powerful and can be used to update your GraalVM local installation to a newer version or upgrade from a Community to Enterprise Edition. Read more in Upgrade GraalVM.
Visual Studio Code Extensions
- Added refactoring and other productivity features.
- Published GraalVM 21.0 Extension Pack for Visual Studio Code on VS Code Marketplace. Read more on the advancements and modifications here.
- Improved the BGV format to support large amount of integer properties.
- Enabled a seamless import of settings from the previous installations of VisualVM.