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. Known issues with the components GraalVM uses are listed here.

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

(2018-12-05)

Bug fixes and performance improvements across all GraalVM components.

Native image generation

Added a new option --allow-incomplete-classpath with GraalVM 1.0-rc10. By default (without specifying this option), classes that are reachable, but missing on the class path, are reported at native image generation time. When specifying this new option, missing classes are only reported at run time. The option provides support for, e.g., libraries that probe the existence of classes, catch the class loading error, and then fall back to a different behavior. This should result in more applications being able to compile to a GraalVM native image.

JavaScript

The project changelog is available on GitHub.

  • Added the ability to construct the Java classpath programmatically. If you know at runtime where the classes and jar files are located – you can add them to the classpath and use Java code from them.
  • Compatibility: added support for several proposals which might become parts of ECMAScript 2019: Array.prototype.{flat,flatMap}, well-formed JSON.stringify, globalThis.
  • Compatibility: moved several non-standard builtins behind flags (see the changelog).

LLVM interpreter (Sulong)

  • Improved the debugging experience: internal functions (originating from the GraalVM LLVM interpreter implementation) are now hidden in the stack traces by default and can be debugged with --inspect.Internal; and unhandled exceptions are now output to stderr instead of stdout.

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

Ruby

GraalVM 1.0-rc10 implementation of Ruby comes with several new features and multiple bug fixes which can be found in the project changelog on GitHub.

  • Compatibility: implemented the following API and added libraries:
    • The nkf and kconv standard libraries were added.
    • Queue and SizedQueue, #close and #closed?, have been implemented.
    • Kernel#clone(freeze) has been implemented.
    • Warning.warn has been implemented.
    • Thread.report_on_exception has been implemented.
  • Compatibility: ArgumentError messages now better match MRI.

Python

  • Several users-facing improvements were made to the embedding interfaces: getting/setting the current working directory in Python now uses the appropriate Truffle APIs, Python will report side effects in the KEY_INFO message, and the KEYS message now responds with attributes and methods (not with dict keys).
  • The interactive help() builtin now works, including asking about language and syntax.

A complete project changelog is available on GitHub.

R

Made important steps for compatibility with the R ecosystem:

  • Improved the support for popular packages: Rcpp modules, dplyr now mostly works, and FastR provides its own version of data.table (work in progress).
  • A new builtin function install.fastr.packages(pkgs) can be used to install FastR-specific versions of the rJava and data.table packages.
  • Fixed linking problems on MacOS when installing R packages and using Fortran code.

The full changelog is available on GitHub.

API changes for GraalVM integrators (SDK + Truffle)

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

Tools

Graal VisualVM

Several quality of life improvements:

  • Added the display of system properties for SVM heap dumps.
  • Added support for the fields histogram and merged references for guest languages: JavaScript, Ruby, and so on.
  • Improved Graal CPU Sampler accuracy.

Ideal Graph Visualizer

  • The tool understands mx project structure now, e.g. Graal Compiler project when opening sources.
  • Improved performance when laying out large graphs.

1.0-RC9

(2018-11-05)

GraalVM for Java Developers (GraalVM + compiler)

Ruby

GraalVM 1.0-rc9 implementation of Ruby features security updates and multiple bug fixes which can be found in the project changelog on GitHub. Here is a short list of most notable changes:

  • LLVM for Oracle Linux 7 can now be installed without building from source.
  • The supported version of LLVM for Oracle Linux has been updated from 3.8 to 4.0.
  • mysql2 is now patched to avoid a bug in passing NULL to rb_scan_args, and now passes the majority of its test suite.
  • The post-install script now automatically detects if recompiling the OpenSSL C extension is needed. The post-install script should always be run in TravisCI as well, see the documentation.
  • Detect when the system libssl is incompatible more accurately and add instructions on how to recompile the extension.

Python

  • Added the support help in the builtin Python shell.
  • Added readline to enable history and autocompletion in the Python shell.
  • Add support for the -q, -E, -s, and -S Python launcher flags.
  • Improved support for string and bytes regular expressions using our TRegex engine.
  • Started the initial support for the binascii module.

A complete project changelog is available on GitHub.

R

  • Various improvements in handling of foreign objects in R.
  • Added missing R builtins and C API: eapply builtin and rapply builtin.

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

JavaScript

A complete changelog is available on GitHub.

LLVM interpreter (Sulong)

The project changelog is available on GitHub.

API changes for GraalVM integrators (SDK + Truffle)

  • Added SourceElement.ROOT and StepConfig.suspendAnchors() to tune debugger stepping.
  • Added Context.Builder.logHandler and Engine.Builder.logHandler methods to install a logging handler writing into a given OutputStream.
  • Primitives, host and Proxy values can now be shared between multiple context and engine instances. They no longer throw an IllegalArgumentException when shared.

The major Truffle and Graal SDK changes between GraalVM versions are summarized in the project changelogs:

Tools

Graal VisualVM

  • Improved Python heapwalker by fixing class names and adding support for PString.
  • Fixed handling Page Up/Down in ProfilerTreeTable. See GH-109 for details.

1.0-RC8

(2018-10-19)

GraalVM for Java Developers (GraalVM + compiler)

  • Added the support for Intel bit manipulation instructions. For more details, see #666.
  • Virtualize unsafe compare and swap calls on non-escaping objects. See #636.

Maven Artifacts

  • The com.oracle.truffle group ID was renamed to org.graalvm.truffle.
  • The graal-sdk, launcher-common and polyglot-tck artifacts were moved from the org.graalvm group ID to org.graalvm.sdk.
  • New artifacts that are now available:
    • org.graalvm.compiler:compiler
    • org.graalvm.js:js
    • org.graalvm.js:js-launcher
    • org.graalvm.js:js-scriptengine
    • org.graalvm.regex:regex
    • org.graalvm.tools:chromeinspector
    • org.graalvm.tools:profiler
    • org.graalvm.truffle:truffle-nfi
    • com.oracle.substratevm:library-support
    • com.oracle.substratevm:objectfile
    • com.oracle.substratevm:pointsto
    • com.oracle.substratevm:svm-driver
    • com.oracle.substratevm:svm
  • The artifacts that are now modular JARs:
    • truffle-api
    • graal-sdk
    • js
    • js-scriptengine
    • compiler
  • The compiler artifact provides the jdk.internal.vm.compiler module and can be used to upgrade that module in JDK 11. Unlike the module present in the JDK, this version contains the optimizing Truffle runtime.

Native Image Generation

  • The native image generator now has automatic support for services loaded using ServiceLoader. All service implementation classes, listed in the META-INF directory, are available automatically as soon as the service interface is used. This eliminates the need to manually register resources and reflection support for such classes. The automatic registration can be disabled with the -H:-UseServiceLoaderFeature option.
  • Finished the support for isolates (starting multiple independent VM instances at run time) and compressed references (to reduce memory footprint; Enterprise Edition only). More details are in an upcoming blog article.
  • A new Maven plugin allows native image generation from within a Maven build.
  • All components necessary for native image generation (Substrate VM and the Graal compiler) are now available on Maven Central. The dependency for that is:
      <dependency>
        <groupId>com.oracle.substratevm</groupId>
        <artifactId>svm</artifactId>
        <version>1.0.0-rc8</version>
        <scope>provided</scope>
      </dependency>
    

JavaScript

  • Updated Node.js to version 10.9.0.

A complete changelog is available on GitHub.

LLVM Interpreter (Sulong)

The project changelog is available on GitHub.

Ruby

  • Ubuntu 18.04 LTS, Fedora 28, and macOS 10.14 (Mojave) now supported.
  • Java.synchronized(object) { } and TruffleRuby.synchronized(object) { } methods have been added.
  • Added a TruffleRuby::AtomicReference class.
  • Performance of setting the last exception on a thread has now been improved.

A complete project changelog is available on GitHub.

Python

  • Python now supports the allocation profiler (--memtracer) to analyze the heap usage of applications.

The changelog is available on GitHub.

R

GraalVM 1.0-rc8 implementation of R came up with multiple bug fixes which can be found in the project changelog on GitHub.

Tools

Graal VisualVM

  • Introduced the CPU and Memory Sampler for guest languages.
  • Submitted improvements in the R language heapwalker.

API Changes for GraalVM Integrators (SDK + Truffle)

The major Truffle and Graal SDK changes between GraalVM versions are summarized in the project changelogs:

1.0-RC7

(2018-10-03)

GraalVM for Java developers (GraalVM + compiler)

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

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

(2018-08-31)

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

(2018-07-31)

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 the list of changes.

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

The project changelog is available on GitHub.

  • 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

(2018-07-13)

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

(2018-06-29)

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

(2018-06-05)

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