GraalVM est une JVM polyglotte. Mais à quoi cela peut-il bien servir ? Avez-vous déjà codé du Java et Javascript en même temps ? Attention, il faut avoir le cœur bien accroché !

Principe de la machine virtuelle polyglotte GraalVM

GraalVM est une machine virtuelle universelle dans le sens où elle permet d’exécuter des applications écrites dans de nombreux langages différents : Java, Python, Javascript, R, Scala, Kotlin ou des langages LLVM comme le C ou C++.

En outre, elle est capable de s’exécuter avec l’API polyglotte. Ce mode permet de faire tourner dans une même JVM un programme écrit dans plusieurs langages partageant le même contexte d’exécution.

Exemple de code Java dans du Javascript sur la JVM

Vous vous demandez à quoi peut bien ressembler le code d’un programme écrit dans plusieurs langages ? Et bien regardez cet exemple de programme Javascript qui contient des instructions Java prenant en paramètre des instructions Javascript qui prennent elles-mêmes…

Parental Advisory explicit content
Êtes-vous prêt ? Ça va piquer…
const span = require("ansispan");
require("colors");

var System = Java.type("java.lang.System");
System.out.println(
  `GraalVM with Java ${
    span(System.getProperties().getProperty("java.version")).green
  }`
);

Vous sentez la nausée monter ? Je vous avais prévenu !

Il est possible de lancer ce programme Javascript sur la JVM GraalVM avec la commande ci-dessous :

$ node.cmd --jvm javaInJsInJvm.js
GraalVM with Java 11.0.10

Pour vous prouver que la coloration de la bibliothèque Javascript ansispan fonctionne sur l’appel système Java getProperties(), voici la capture d’écran du résultat :

Perspectives d’une JVM polyglotte

Après vous avoir dressé ce portait peu flatteur, je vais tout de même essayer de vous donner quelques idées de cas d’usage.

Quand Oracle a dévoilé cette fonctionnalité, l’idée était de dire que les langages de programmation ont leur domaine d’expertise. Et plutôt que de démarrer plusieurs JVM pour chaque service et mettre en place un protocole de communication entre chaque processus, GraalVM se propose de supprimer l’isolation entre ces programmes. Alors, il y a peut-être des cas d’usage mais on a tendance à vouloir séparer nos services dans des processus autonomes1

En revanche, un cas d’usage qui pourrait être intéressant est celui de l’extensibilité d’un moteur de traitement. Imaginons que vous ayez une expertise en Java. Vous avez créé un moteur pour votre application qui tourne en Java. Dans un même temps, vous souhaitez ouvrir ce moteur en permettant l’écriture d’extensions ou de hooks. Or, il est peut-être judicieux de permettre l’écriture de ces extensions dans un langage plus abordable et plus répandu tel que le Javascript. C’est ici que GraalVM polyglotte peut avoir un intérêt en permettant d’exécuter au sein d’une même JVM des plugins écrits dans un autre langage.

Et vous ? Avez-vous trouvé un intérêt à la JVM polyglotte ?

  1. Oui, il est loin le temps des serveurs d’applications.
https://blog.lecacheur.com/wp-content/uploads/2021/03/640px-Graalvm_logo.svg_.pnghttps://blog.lecacheur.com/wp-content/uploads/2021/03/640px-Graalvm_logo.svg_-150x128.pngSeBJava EEgraalvm,java,javascriptGraalVM est une JVM polyglotte. Mais à quoi cela peut-il bien servir ? Avez-vous déjà codé du Java et Javascript en même temps ? Attention, il faut avoir le cœur bien accroché ! Principe de la machine virtuelle polyglotte GraalVM GraalVM est une machine virtuelle universelle dans le sens où elle...Un blog, c'est un blog !