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-RC7

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)

Added the virtualization of Unsafe compare and swap calls, for more details see GH-636.

Note that due do the issue with the underlying platform Java Mission control freezes at startup on MacOS. Because of that we removed the jmc utility from the distribution. For more information and workarounds please see the JMC known issues page.

Native image generation

JavaScript

  • Improved support for sharing of shapes between Contexts with the same Engine, which allows to reuse ASTs and objects across different manually created contexts.
  • Support for BigInteger typed TypedArrays.

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

LLVM interpreter (Sulong)

The full changelog is available on GitHub.

  • New polyglot builtin polyglot_has_member.
  • Removed support for implicit polyglot types for local variables as the availability of type information is not guaranteed. Explicit polyglot casts are now strictly required (polyglot_as_typed). See docs/INTEROP.md and polyglot.h for more details.
  • Support for IR-level (textual representation of bitcode files) tracing, i.e., creating an execution log of all bitcodes that were executed, for debugging purposes.
  • Preliminary support for LLVM 7.

Ruby

The complete changelog is available on GitHub. Here is a short list of most notable changes.

  • Useful inspect strings have been added for more foreign objects.
  • Added the rbconfig/sizeof native extension for better MRI compatibility.
  • Support for pg 1.1. The extension now compiles successfully, but may still have issues with some datatypes.
  • readline can now be interrupted by the interrupt signal (Ctrl+C). This fixes Ctrl+C to work in IRB.
  • Fixed version check preventing TruffleRuby from working with Bundler 2.0 and later.
  • Removed obsoleted patches for Bundler compatibility now that Bundler 1.16.5 has built-in support for TruffleRuby.
  • Fixed problem with Kernel.public_send not tracking its caller properly rb_thread_call_without_gvl() no longer holds the C-extensions lock.
  • Fixed caller_locations when called inside method_added.
  • Fixed mon_initialize when called inside initialize_copy.

Python

  • Added support for the re.split builtin.
  • Enhanced the java interop builtin module with introspection utility methods.
  • Changes in C extension interface to reduce overhead.

The changelog is available on GitHub.

R

  • AWT based graphics devices (jpg, png, X11, …) is supported when running FastR as a native image.
  • eval.polyglot: the parameter source was renamed to code.
  • New builtin as.data.frame.polyglot.value creates R data frames from Polyglot objects (KEYS are used as column names, the values must be homogenous arrays, e.g. respond to HAS_SIZE).
  • Paths in eval.polyglot are resolved relative to the current working directory.
  • Various fixes necessary to pass dplyr tests (GitHub version of dplyr).

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

Tools

Ideal Graph Visualizer

  • User can navigate to Javascript (guest language) source from the graph nodes.
  • Ideal Graph Visualizer prompts to download plugins to support Javascript editing.
  • Simple scripts (written in Javascript) can be applied on graph data.

API changes for GraalVM integrators (SDK + Truffle)

  • Truffle and GraalSDK license changes from GPL2 with Class Path Exception to the Universal Permissive License (UPL). Please refer to the license files for more information: Truffle license, Graal-SDK license.

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

1.0-RC6

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.

  • Note that due do the issue with the underlying platform Java Mission Control (jmc) freezes at startup on MacOS. For more information and workarounds please see the JMC known issues page.

GraalVM for Java developers (GraalVM + compiler)

Native image generation

  • Delay class initialization to runtime: By default, all classes that are seen as reachable for a native image are initialized during image building, i.e., the class initialization method is executed during image building and is not seen as a reachable method at runtime. But for some classes, it is necessary to execute the class initialization method at runtime. This is now possible using the new option --delay-class-initialization-to-runtime=<comma separate list of class names> or using the new API class RuntimeClassInitialization.
  • Direct byte buffer are no longer allowed in the image heap: We added a new verification during image generation to ensure that no direct or mapped byte buffers (MappedByteBuffer instances) are in the image heap. Such buffers have either a pointer to C memory or reference a file descriptor, i.e., native resources that are available during image generation but no longer at image runtime. Using such a buffer would lead to a segfault at runtime. We discovered this issue because Netty has a few direct buffers that are created in class initializers. It is necessary to delay the initialization of such classes to runtime.
  • Better automatic discovery of classes, methods, and fields accessed via reflection. When String parameters of Class.forName, Class.getMethod, Class.getField, and other similar classes can be constant folded during image generation, then these classes, methods, and fields are automatically registered for reflection usage and do not need to be registered manually on the command line. Constant String parameters are a common pattern to support, e.g., different JDK versions or different library versions where a class, method, or field is not present in all cases and therefore cannot be used directly.

LLVM interpreter (Sulong)

The full changelog is available on GitHub.

  • Support for LLVM IR-level debugging, i.e., debugging at the level of *.ll instead of *.c files.
  • New polyglot cast functions for primitive array types, which allows object from other languages to be used like primitive arrays.
  • Support for function pointer members in polyglot_as_typed, which allows objects from other languages to be used in expressions like obj->func(args).

Ruby

The complete changelog is available on GitHub. Here is a short list of most notable changes.

  • TruffleRuby is now usable as a JSR 223 (javax.script) language;
  • A migration guide from JRuby is now included.
  • The embedded configuration -Xembedded can now be set set on the launcher command line.
  • Polyglot.export can now be used with primitives and converts strings to Java, when Polyglot.import converts them from Java.
  • Foreign objects optimisations such as unboxing foreign strings on to_sto_str, and inspect.
  • Optimized performance and keyword rest arguments (def foo(**kwrest)).
  • Multiple bug fixes from user reports.

Python

The full changelog is available on GitHub.

  • Improved compatibility with regular expressions by including CPython’s sre module as a fallback engine (in addition to Truffle’s regular expression engine).
  • C extension modules can now be compiled with LLVM 5+, which was prevented by internal incompatibilities before.
  • Introduced lazy string concatenation to significantly speed up code patterns that repeatedly concatenated strings.
  • Numerous C-API improvements to extend support for scikit-learn.
  • Extensions and fixes in various areas: behavior of function and code objects, collections, exception handling during import, type ids, documentation and generators.
  • Update standard library to CPython 3.6.5.
  • Enable reuse of ASTs in multiple Contexts (requires the contexts to be created in the same polyglot Engine).

R

The full changelog is available on GitHub.

  • Support for reading/writing graphical parameters via par.
  • Added numerous builtins to the C API, enabling support for packages like RCurl, rjson, compare, naivebayes, etc.
  • Added support for formulas that include ....
  • Various bug fixes: attributes of NULL objects, of CR/LF handling in readLine, La_chol with pivot, warnings/errors in vector coercion.

API changes for GraalVM integrators (SDK + Truffle)

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

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 will not 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.

JavaScript

  • Updated Node.js to 8.11.1 (from 8.9.4), it is 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 languages.

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.

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
  • Applicability 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