If you find an issue or want to submit a feature request please use the repositories for the project closest related to the issue:

If in doubt, the main repository will work, we’d be happy to hear any feedback: oracle/graal.

On this page, we would like to highlight the most important changes in the GraalVM releases. There are different components to GraalVM, so we highlight the changes to these separately.

1.0-RC5

GraalVM 1.0-rc5 is the first release where we provide pre-built binaries for GraalVM CE on macOS. As always all binaries are available from the downloads page.

KNOWN ISSUES

  • The GraalVM CE image for MacOS currently depends on some libraries that are not installed by default on current MacOS versions. This might cause issues with UI-related functionality:
    Library not loaded: /usr/X11/lib/libfreetype.6.dylib
    

    The necessary components can be added, e.g., by installing https://www.xquartz.org. We will remove this dependency in upcoming versions of GraalVM CE for MacOS.

GraalVM for Java developers (GraalVM + compiler)

  • 1.0-RC5 includes JVMCI changes necessary to support compiling Graal ahead of time and deploying as a shared library alongside libjvm.so (i.e., libgraal). Note that the implementation of libgraal itself is not a part of this release as it is still under development.

Native image generation

  • Added API that allows an application to distinguish between native image building, native image runtime, and regular Java execution. For more information and documentation, look at the class ImageInfo.

JavaScript

  • Removed legacy NashornExtensions option, use --js.nashorn-compat instead.
  • Added support for Symbol.prototype.description.
  • Added support for String.prototype.matchAll.

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

Ruby

The full changelog is available in the GitHub repository, but here are some of the most notable changes.

  • Simpler installation on macOS: it is no longer needed to add LLVM (/usr/local/opt/llvm@4/bin) to PATH on macOS.
  • --log.ruby.level= can be used to set the log level from any language launcher.
  • String#unpack1 has been implemented.
  • Optimized required and optional keyword arguments.
  • -Dtruffleruby.log and TRUFFLERUBY_LOG have been removed - use -Dpolyglot.log.ruby.level.
  • The custom log levels PERFORMANCE and PATCH have been removed.

Python

  • Generator expressions now properly evaluate their first iterator in the definition scope at definition time.
  • Fixes for embedders to ensure top scopes are stable and local scopes always contain TruffleObjects.
  • C-API improvements to support simple Cython modules.
  • Support recognition of Python source files with the polyglot launcher, so that now --language python is not necessary when starting Python scripts with the polyglot launcher (note that the polyglot launcher still needs to be rebuilt using bin/gu rebuild-images polyglot after installing Python).

Full changelog is available on GitHub CHANGELOG.md

R

See CHANGELOG for a complete list.

LLVM interpreter for C/C++ & other native languages

Changelog: https://github.com/graalvm/sulong/blob/master/CHANGELOG.md

  • Support the __builtin_debugtrap function based on LLVM’s @llvmn.debugtrap intrinsic, which can be used to drop into the debugger (e.g., Chrome Inspector).
  • Support “zero-length array at end of struct” pattern when accessing polyglot values as structs.
  • Improved performance of global variable access.
  • Improved support for vectorized bitcode operations generated by clang.

API changes for GraalVM integrators

  • Added new execution listener API that allows for simple, efficient and fine-grained introspection of executed code.
  • Changed the default language context policy from SHARED to EXCLUSIVE, i.e. by default there is one exclusive language instance per polyglot or inner context. This can be configured by the language using the context policy.

To see the full list of changes to the APIs please refer to the project changelogs:

Tools

VisualVM

  • VisualVM was added to the GraalVM CE distribution.

1.0-RC4

General Remarks

While we provide updated components for all languages for this rc4 release, only the JavaScript component received fixes from its upstream repository. All other languages are unchanged in terms of functionality

The next release, rc5, is planned for the beginning of August and will provide updates for all components.

JavaScript

The GraalVM JavaScript component has been updated to provide better compatibility with the Nashorn engine. There now is a --nashorn-compat flag to enable backwards compatibility functionality. This flag is highly discouraged for new applications, but can simplify the migration from Nashorn to GraalVM for existing code.

  • Access getters and setters like fields
  • Provide Java.extend, Java.super, JavaImporter, JSAdapter
  • Allow to construct Interfaces or AbstractClasses
  • Provide top-level package globals java, javafx, javax, com, org, edu

  • Provide Java.isScriptFunction, Java.isScriptObject, Java.isJavaMethod and Java.isJavaFunction

Some global functions and objects have been added for the scripting mode and can be enabled with the --scripting flag:

  • Provide $EXEC, $ENV, $ARG, $OPTIONS

1.0-RC3

GraalVM for Java developers (GraalVM + compiler)

  • Updated the underlying JDK version to “1.8.0_172” from “1.8.0_171”. You can find the JDK release notes at the Oracle Technology Network website.
  • Fixed a rare NullPointerException during JVMCI initialization.

Native image generation

  • Added support for java.lang.reflect.Proxy supporting both automatic detection and manual configuration. Please refer to the documentation on GitHub for the details.
  • Added support for Classloader.getResource() and similar methods.
  • Added support for loading services through theServiceLoader.
  • Fixed a ClassCastException on generating native images for profile-guided-optimizations (with the–pgo-instrument command line option).

JavaScript

  • Enabled code sharing between Contexts with the same Engine.
  • Added support for BigInt arithmetic expressions.
  • Added a flag for the Nashorn compatibility mode --js.nashorn-compat, for the details and migration from Nashorn please refer to the documentation.
  • Rename the flag for the V8 compatibility mode to js.v8-compat.

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

Ruby

The full changelog is available in the GitHub repository, but here are some of the most notable changes.

  • Added ability to call is_a? on foreign objects.
  • Fixed: Qnil/Qtrue/Qfalse/Qundef can now be used as initial value for global variables in C extensions.
  • Fixed: SIGPIPE is correctly caught on SubstrateVM, and the corresponding write() raises Errno::EPIPE when the read end of a pipe or socket is closed.
  • Fixed determining the source encoding for eval() based on the magic encoding comment.

Additionally, we implemented a number of performance improvements for stat()-related calls, eval(), String substitutions, reading from IO and more.

Python

GraalVM Python implementation is still in the early stages, but we’re making progress towards the goal of running applications which use SciPy.

  • Various C-API improvements allow to run simple NumPy examples.
  • Implemented buffered I/O and more encodings support, which enables working with files through the standard open function without having to force unbuffered access, and enables working with files that have encodings other than utf-8.
  • Most math module functions are now implemented and work correctly.
  • The random module substitute was removed and we now run the standard library random module to be fully compatible.
  • Improved thread-safety in the embedded scenarios when using Python contexts from multiple threads.

More details are available in the project’s changelog on GitHub.

R

  • Added more missing R builtins and C API functions, see CHANGELOG for a complete list.
  • Simplified installation, the script that configures FastR for the current system jre/languages/R/bin/configure_fastr does not require Autotools anymore.
  • Added configuration files to allow users to build a native image of the FastR runtime, which reduces the startup time. Run jre/languages/R/bin/install_r_native_image to build the image.
  • Fixed an issue with the plotting window not displaying anything after it was closed and reopened.

LLVM interpreter for C/C++ & other native languages

  • New builtins polyglot_from_typed and polyglot_as_typed, which can be used to dynamically attach types to polyglot objects.
  • Implementers of TruffleObject can now respond to the GetDynamicType message to provide a type when an object is accessed from LLVM code.

More details are available in the project changelog.

API changes for GraalVM integrators

  • Added support for logging in Truffle languages and instruments.
  • Removed deprecated ResultVerifier.getDefaultResultVerifier API.

To see the list of changes to the APIs please refer to the project changelogs:

Tools

VisualVM

We improved memory footprint and introduced several UI improvements for cleaner more responsive experience of VisualVM. In addition to that, there are the following improvements:

  • Added recognition of the LLVM interpreter (Sulong) processes.
  • Improved displaying logical values of guest languages’ objects.
  • Improved the Object Query Language (OQL) Console for inspecting memory dumps functionality — sorting, filtering, aggregation, unlimited number of results now work.

Chrome inspector

  • Multiple inspector sessions for multiple polyglot engines can run on the same port now.

1.0-RC2

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.

#include <stdio.h>
#include <polyglot.h>
int main() {
    void *bigInteger = polyglot_java_type("java.math.BigInteger");
    void *(*BigInteger_valueOf)(long) = polyglot_get_member(bigInteger, "valueOf");

    void *bi = BigInteger_valueOf(2);
    void *result = polyglot_invoke(bi, "pow", 256);

    char buffer[100];
    polyglot_as_string(polyglot_invoke(result, "toString"),
                       buffer,
                       sizeof(buffer),
                       "ascii");

    printf("%s\n", buffer);
}

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.

# shelajev at shrimp.local in /tmp
→ clang -c -O1 -emit-llvm -I$GRAALVM_HOME/jre/languages/llvm big-integer-demo.c

# shelajev at shrimp.local in /tmp
→ lli --jvm big-integer-demo.bc
115792089237316195423570985008687907853269984665640564039457584007913129639936

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!

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:

Tools

VisualVM

  • 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”.
  • -c option for installing from the catalog, can be omitted (installing from the catalog the default), but specifying -c still works.
  • Use -F to install from local files, i.e. bin/gu -F /tmp/ruby-installable.jar.

Chrome Inspector

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