days
-6
-6
hours
-1
-6
minutes
-2
-3
seconds
0
-5
search
Onward

Full speed ahead: GraalVM 1.0-RC9 is here

Gabriela Motroc
GraalVM
© Shutterstock / hobbit

The GraalVM team is hard at work! After GraalVM 1.0-RC8 was released less than a month ago, RC9 is ready to see the light of day. Let’s have a look at the most important changes in this release.

No rest for the GraalVM team! GraalVM 1.0-RC8 was released less than a month ago but the next release candidate is ready for the spotlight.

For more details about GraalVM 1.0-RC9, check out the release notes.

If you want to learn more about GraalVM’s ambitions and see the differences between this universal virtual machine designed for a polyglot world and Nashorn JavaScript Engine, check out this interview with Thomas Wuerthinger.

Now let’s have a look at the highlights of this release.

Python

The main focus is on user-observable behavior of the engine.

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

If you’re interested in all the details regarding the major changes between GraalVM versions of the Python language runtime project, check out the changelog.

R

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

If you’re interested in all the details regarding the latest changes, check out the changelog.

API changes for GraalVM integrators (SDK + Truffle)

  • Added ArrayUtils API providing additional array and/or string operations that may be intrinsified by the compiler.
  • 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 IllegalArgumentExceptionwhen shared.

You’ll find a summary of the major Truffle and Graal SDK changes between GraalVM versions 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.

 

Update August 6, 2018

Things are shaping up nicely; GraalVM 1.0-rc5 is the first release where the team provide pre-built binaries for GraalVM CE on macOS. Binaries are now publicly available for download.

First things first: The GraalVM CE image for MacOS currently depends on some libraries that are not installed by default on current MacOS versions, which could cause issues with UI-related functionality:

Library not loaded: /usr/X11/lib/libfreetype.6.dylib

You can add the necessary components for example, by installing https://www.xquartz.org. Don’t worry though, the team 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). However, keep in mind that the implementation of libgraal itself is not a part of this release as it is still under development.

Native image generation

Applications can now distinguish between native image building, native image runtime, and regular Java execution thanks to this API. For more information and documentation, look at the class ImageInfo.

JavaScript

Legacy NashornExtensions option has been removed so you are advised to use --js.nashorn-compat instead.

The team also added support for  Symbol.prototype.description and  String.prototype.matchAll.

For more details about GraalVM 1.0-rc5, check out the release notes and changelog.

If you want to learn more about GraalVM’s ambitions and see the differences between this universal virtual machine designed for a polyglot world and Nashorn JavaScript Engine, check out this interview with Thomas Wuerthinger.

 

Update June 7, 2018

We wrote about GraalVM a couple of months ago so we’re happy to see that things are moving fast; 1.0-rc1 was released a few weeks ago and now rc2 is here.

Both the Community Edition and the Enterprise Edition binaries are now publicly available for download.

GraalVM 1.0-rc2 highlights

GraalVM for Java developers

According to the release notes, the underlying JDK version has been updated from “1.8.0_161” to “1.8.0_171” and the support for the Java Microbenchmark harness has been improved – GraalVM is now a recognized and supported JVM.

What’s been fixed?

  • StackOverflow exception an improved performance when recursively inlining of invokedynamic instructions.
  • compiler error causing incorrect code generation while building the scalac compiler.

Native image generation

GraalVM 1.0-rc2 offers support for building statically linked native images, which means that you can now pass --static, and if you have static libc and zlib installed, it generates a standalone executable that won’t require libc for running.

Speaking of improvements, the team also 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.

What’s been fixed?

  • The handling of implicit exceptions (NullPointerExeptionArrayIndexOutOfBoundsExceptionClassCastException, …): 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.
  • 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

There’s not much to say except for the fact that it has been updated from Node.js 8.9.4 to Node.js to 8.11.1. Although it’s not a breaking change, it brings a lot of improvements, including CVE-listed security fixes.

SEE ALSO: Meet GraalVM, Oracle’s polyglot virtual machine

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

Now that a new API has been added for accessing Java types and instantiating foreign objects from LLVM languages, you can easily call Java code from native programs compiled to the LLVM bitcode.

API changes for GraalVM integrators

Good news! Graal SDK and Truffle are offering API for developers trying to build things on top of GraalVM, language implementations, embedding GraalVM, and so on.

To see the list of changes to the APIs, have a look at the project changelogs:

That’s not all, of course. Check out the release notes here

Get started with GraalVM

GraalVM gives you enhanced performance for JVM-based applications written in languages such as Java, Scala, Groovy or Kotlin thanks to Graal, a dynamic compiler which improves efficiency and speed of applications. The Graal compiler is also available as an experimental option in JDK 10. However, you should be using it with GraalVM if you want to unlock the latest features and boost performance.

If you’re a JavaScript developer building Node.js apps, you should use Graal JavaScript [Graal.js], an ECMAScript compliant JavaScript engine. It provides all the benefits from the Graal stack, including language interoperability and common tooling.

If you want to find out more about GraalVM, you should check out the reference manual. All you have to do is choose your favorite language and go to its page. But before you do that, you should make sure the libraries and modules you use as dependencies work with GraalVM. To do it, please use the GraalVM Language Compatibility tool.

Author
Gabriela Motroc
Gabriela Motroc is editor of JAXenter.com and JAX Magazine. Before working at Software & Support Media Group, she studied International Communication Management at the Hague University of Applied Sciences.