GraalVM 1.0-rc2 Release Notes

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.

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 invokedynamic instructions.
  • 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 libc and zlib installed, it generates a standalone executable that won’t require libc for running.
  • 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 (NullPointerExeption, ArrayIndexOutOfBoundsException, 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!

JavaScript

  • 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 of2^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.

Ruby

  • We are now compatible with Ruby 2.4.4.
  • Java.import name imports Java classes as top-level constants.
  • Coercion of foreign numbers to Ruby numbers now works.
  • to_s works on all foreign objects and calls the Java toString.
  • to_str will 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.

R

Among the other changes, we improved the stability of GraalVM’s R implementation.

  • Added a./jre/languages/R/bin/configure_fastr script that allows FastR’s native build scripts to adopt to the current system, which makes installing R packages much more stable.
  • The fastr_errors.log file was renamed to fastr_errors_pidXYZ.log and 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.:

Python

  • 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 Contexts with 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:

Next steps

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.

Download the binaries, try the getting started journey and see what it can do for your projects.

We are happy to receive any feedback, issues, or feature requests. Please leave them on the main GitHub repository for the project: oracle/graal. Or talk to us on Twitter: @graalvm.

Thank you from the GraalVM team!

Like what you read? Give Oleg Šelajev a round of applause.

From a quick cheer to a standing ovation, clap to show how much you enjoyed this story.