Several weeks ago, we released GraalVM 1.0-rc1 and launched the GraalVM website with documentation and examples. We would like to thank all early adopters who tried the GraalVM 1.0-rc1 release on their projects and reached out to us with feature requests and issue reports. We are very happy to have received so much useful feedback from the community!
This has kept us busy solving issues making GraalVM more stable and work better for your use cases.
Today we are ready to release GraalVM 1.0-rc2 with both the Community Edition and the Enterprise Edition binaries publicly available for download.
Apart from general bug fixing and performance improvements, we would like to highlight the most important changes in the GraalVM 1.0-rc2 release. There are different components to GraalVM, so we highlight changes these separately.
The release notes for the next release 1.0-rc3 can be found here.
GraalVM for Java developers
- Updated the underlying JDK version to “1.8.0_171” from “1.8.0_161”. You can find the JDK release notes at the Oracle Technology Network website.
- Improved support for the Java Microbenchmark harness. Since JMH 1.21, GraalVM is a recognized and supported JVM.
- Fixed a StackOverflow exception an improved performance when recursively inlining of
- Fixed a compiler error causing incorrect code generation while building the scalac compiler.
Native image generation
- Added support for building statically linked native images. Now you can pass
--static, and if you have static
zlibinstalled, it generates a standalone executable that won’t require
- Added Classpath exception to the license of SubstrateVM and the Graal compiler components to make sure all GraalVM code ending up in a native image is subject to this clause.
- Fixed the handling of implicit exceptions (
ClassCastException, …): all exceptions now have correct stack traces and can be caught as expected. Previously, implicit exceptions were sometimes not caught by an exception handler within the same method.
- Fixed a number of exceptions during the generation of native images that were reported by early adopters. Thank you for the reports on GitHub - keep them coming!
- Updated Node.js to 8.11.1 (from 8.9.4), it’s not a breaking change, but it brings numerous improvements, including CVE-listed security fixes.
LLVM interpreter for C/C++ & other native languages
- Added a new API for accessing Java types and instantiating foreign objects from LLVM languanges.
Now it is possible to easily call Java code from native programs compiled to the LLVM bitcode. The example below shows how you can access Java’s BigInteger long math operations from C.
If we compile it to the LLVM bitcode, we can execute it with GraalVM. You can see that it computes the value of
2^256 which isn’t that easy to do in C otherwise.
A more detailed list of changes to the LLVM interpreter can be found in the full changelog.
- We are now compatible with Ruby 2.4.4.
Java.import nameimports Java classes as top-level constants.
- Coercion of foreign numbers to Ruby numbers now works.
to_sworks on all foreign objects and calls the Java
to_strwill try to UNBOX and then re-try
to_str, in order to provoke the unboxing of foreign strings.
Much more details can be found in the full changelog.
Among the other changes, we improved the stability of GraalVM’s R implementation.
- Added a
./jre/languages/R/bin/configure_fastrscript that allows FastR’s native build scripts to adopt to the current system, which makes installing R packages much more stable.
fastr_errors.logfile was renamed to
fastr_errors_pidXYZ.logand is stored in either initial working directory, the user home directory,
/tmp, or the FastR home directory (picking the first location that is writeable). Please add it to the bug reports if you submit issues, thank you!
Also, windows that display plots now properly resize their contents when they are resized (as opposed to losing the contents), e.g.:
- Added support for the Python unittest framework.
- Python now supports breaking on exceptions and unwinding to stack frames in Chrome inspector.
API changes for GraalVM integrators
Both Graal SDK and Truffle are offering API for developers trying to build things on top of GraalVM, language implementations, embedding GraalVM, and so on.
- Enabled code sharing between guest language
Contextswith the same
Engine, speeding up the repeated evaluation of the code.
To see the list of changes to the APIs please refer to the project changelogs:
- fixed the issues with loading polyglot heap dumps
- fixed executing of scripts in R console
- improved recognition of R REPL
- fixed ‘loop to’ nodes
- fixed memory leak in child nodes
- improved appearance on MacOS
- A11Y fixes
- added roots histogram for class
Graal Updater `gu`
- The default operation mode changed from “install from local files” to “install from catalog”.
-coption for installing from the catalog, can be omitted (installing from the catalog the default), but specifying
-Fto install from local files, i.e.
bin/gu -F /tmp/ruby-installable.jar.
Fixed a number of issues:
- fixed the initial suspend of node scripts with no statement on the first line
- fixed tooltip issues and representation of the functions
- fixed issues with re-connection of Chrome inspector client
We will continue working on improving stability before the imminent GA 1.0 release. If you haven’t yet done so, please give GraalVM a try for your application.
Thank you from the GraalVM team!