Pourquoi cett présentation?
- Beaucoup d'information éparpillée sur le net
- Suite à une travail de consolidation, autant partager ces informations
Tout d'abord, on présentera très succcintement la JVM, afin de mieux comprendre
les différences avec GraalVM.
Dans un deuxième partie, on présentera les fonctionnalités nouvelles/complémentaires apportés par GraalVM
à la compilation:
- Lecture du fichier source, n'importe quel language compatible avec la JVM (java, scala, kotlin, groovy)
- Suite à la phase de compilation on se retrouve avec du byte code qui peut être ensuite executé par une JVM
au runtime:
Le bytecode va être:
- Chargé
- Vérifié pour s'assurer que le bytecode est compatible
- Interprété puis transformer en instructions compréhensible par la plateforme cible (Windows, Linux, Mac OS)
L'intérprétation du bytecode rend l'execution du programme plus lent.
Le fonction du just-in_time compiler et d'améliorer les performances de l'application,
en passant une deuxième phase de compilation au runtime, en compilant et optimizant le bytecode
en language machine.
Par l'intérmédiaire du JIT, la plateforme va executer directement les instructions issues du JIT, plutôt que
ré-interpretér le bytecode.
Les promesses de GraalVM sont les suivantes:
- L'intérprétation et l'éxecution d'une variété de language , en plus de ceux inclus dans la JVM: js, ruby, python, etc...
- L'interopérabilité de ces languages
- Tout cela, sur une variété de moteurs d'execution: il inclut une JVM, mais un aussi un moteur javascript (complétement compatible avec nodejs)
- On peut même embarquer graalvm dans une base de donnée compatible (usage? PL/SQL en java/python?)
Le but affiché: Fournir une plateform et des outils hautement performant, language-agnostic
Truffle est un framework pour implémenter des interpréteurs de languages en utilisant de AST simplement
bibliothèque Open Source permettant de créer des implémentations de langages de programmation.
Un AST - arbre de la syntaxe abstraite - analyseur syntaxique.
Un AST est un arbre dont les nœuds internes sont marqués par des opérateurs et dont les feuilles (ou nœuds externes) représentent des variables ou des constantes.