Posted by Raj Wadhwa | Last Updated: 30-Nov-18
Imagine a world where you have one single ecosystem, to drive all the species (in their individually natural habitat).
Sounds interesting right.
GraalVM enables the interoperability in an environment of shared runtime. And by doing this, it removes the isolation between various Programming languages.
It can be run in the varied contexts of Nodejs, RDBMS databases (based on the above-mentioned languages - Oracle Database or MySQL), OpenJDK etc.
After this basic definition of GraalVM, Now I can provide a better definition of GraalVM which is as follows :
GraalVM is an embeddable highly efficient polyglot Virtual Machine that is capable of running:
- JVM-based languages, such as Java, Scala, Kotlin, and Groovy
- Native languages that work with LLVM, such as C, C++, Rust, and Swift
Building Blocks of GraalVM
GraalVM is an Open-Source Project, mostly written Java. Hence, you don't need to be an expert in the native code to get used to the working of GraalVM.
Let's look at what GraalVM is made up of.
A Just-In-Time Compiler, Graal
Such a VM is nothing without a high-performance VM. So, the backbone of this VM is a compiler that can be used both as a JIT-Compiler and static flavour of the ahead-of-time compiler.
This compiler is called Graal.
It implements many optimizations like :
- Constant folding
- Subexpression elimination
- dead-code elimination
However, the areas where it really comes out with flying colours are:
- Inkling Algorithm
- Escape Analysis Algorithm
Next ingredient of any good VM is that we need something that can understand different types of languages.
For GraalVM, Truffle serves this part of the recipe. Truffle offers an API that you can use to implement
an interpreter of a language based on the abstract syntax trees (ASTs) of the source programs.
Evaluating ASTs is a relatively straightforward way to execute a program, so working on interpreter is much easier than creating an optimizing compiler.
Last part of such an amazing recipe is that we need a way to prepare images so that they can be run in the containerized environment.
For GraalVM, this is done by SubstrateVM that helps in converting the apps written in any language to such native images that can be executed directly without the need of the JVM, don't need to load and initialize java images and hence the startup is very fast.