GraalVM: IL SANTO GRAAL DELLE VIRTUAL MACHINE

da

Con un nome così pretenzioso, Oracle presenta quello che ritiene il Santo Graal delle Virtual Machine.
Ma di che si tratta?
GraalVM è un ecosistema basato su JDK 8 (Java Development Kit 8), che include una Universal Virtual Machine con runtime condiviso.

E cosa farebbe di così speciale? GraalVM esegue applicazioni poliglotte utilizzando un mix dei punti di forza dei vari linguaggi di programmazione supportati. Potremmo avere, ad esempio, una web application come “Weather predictor” dove JavaScript, Ruby e R lavorano insieme senza alcun compromesso e con prestazioni molto elevate.

Allo stato attuale, i linguaggi supportati sono JavaScript, Python, Ruby, R, linguaggi JVM-based come Java, Scala, Kotlin, e linguaggi LLVM-based come C e C++.

Essendo un ecosistema, GraalVM è un insieme di componenti, ognuno con la propria funzione specifica:

Graal
Un compilatore JIT (Just In Time) dinamico che migliora l’efficienza e la velocità delle applicazioni.
API Graal Polyglot
API per combinare i linguaggi di programmazione in un runtime condiviso.
Graal SDK
API utili per l’integrazione di linguaggi Graal e la configurazione di immagini native.
JVM Oracle HotSpot
Ambiente di runtime per linguaggi basati su JVM.

LE FUNZIONALITÀ DI GraalVM

La soluzione di Oracle fornisce, oltre alla possibilità di eseguire applicazioni poliglotte, nuove prospettive sull’elaborazione dei dati contenuti all’interno dei database Oracle 12c e MySQL.
Sfruttando il MLE (Multilingual Engine) del database, è infatti possibile eseguire moduli Node.js scritti in JavaScript all’interno di query e procedure dei due db.

GraalVM è anche in grado di rendere le applicazioni Java più veloci con una nuova tecnologia di compilazione just in time, e cosa non da poco, compilare il bytecode Java in codice macchina.

Al suo interno ha infatti una funzione per creare immagini native per le applicazioni esistenti basate su JVM. Il processo di generazione dell’immagine utilizza l’analisi statica per trovare qualsiasi codice raggiungibile dal metodo Java principale e quindi eseguire la compilazione AOT (Ahead Of Time).

Il binario nativo che ne risulta contiene l’intero programma sotto forma di codice macchina per la sua immediata esecuzione.
Tali funzionalità permettono di creare una Native Java Function, come descritto in questo tutorial. Oppure si può collegare ad altri programmi nativi e includere il compilatore in maniera facoltativa.

GraalVM può anche eseguire applicazioni JavaScript scritte per Node.js, sostituendo V8 (il JavaScript engine di Google usato anche da Node.js). I principali vantaggi di tale operazione sono ovviamente nelle applicazioni poliglotte (ad esempio, utilizzare librerie Java, R o Python), oppure nell’eseguire processi con configurazioni di heap di grandi dimensioni e garbage collector Java, oppure, non da ultimo, utilizzare l’interoperabilità di GraalVM per definire le strutture di dati in C / C ++ da condividere con JavaScript. Queste caratteristiche consentono l’uso di librerie Java esistenti o framework Java, come Spark, da parte di processi Node.js. Inoltre, si può usare ad esempio R o Python per effettuare data science direttamente da un’applicazione JavaScript.

I 3 FILONI DI APPLICAZIONE IN INTERLOGICA

Attualmente in Interlogica stiamo testando le potenzialità di questa tecnologia in tre filoni principali, considerando anche il fatto che Twitter sta già usando GraalVM in produzione, con ottimi risultati, a quanto affermano.

  1. Il primo filone riguarda l’ottimizzazione nell’utilizzo delle risorse e l’aumento delle prestazioni da parte di applicazioni Java esistenti;
  2. il secondo la creazione di soluzioni poliglotte, andando ad utilizzare al meglio i punti di forza di ogni linguaggio, in particolar modo in ambiti come data science e machine learning, dove Python sta facendo la parte del leone, ma C / C++ continuano ad avere le prestazioni migliori;
  3. terzo la possibilità di creare codice macchina per la sua immediata esecuzione all’interno di dispositivi embedded ed IoT (Internet of Things), dove le risorse sono minori ed è essenziale che il codice sia minimo, sia rispetto all’occupazione di memoria, sia rispetto al tempo di esecuzione.

GraalVM presenta ancora alcuni errori di gioventù, ma del tutto comprensibili visto che la versione 1.0 si trova ancora in release candidate.

Le potenzialitá di questo prodotto rimangono comunque alte, ed aprono nuovi scenari nello sviluppo di una moltitudine di soluzioni software.

TI È PIACIUTO QUESTO ARTICOLO? LEGGI ANCHE:

Autenticazione: SCRAM-SHA256 feat. DH Key Exchange
8 modi per prevenire un attacco Ransomware

Blog

DUE PAROLE COL VINCITORE DEL TITOLO CODE CHAMPION 2022

DUE PAROLE COL VINCITORE DEL TITOLO CODE CHAMPION 2022

Le luci sul Code in the Dark si sono abbassate da poche settimane. Stessa location, ARGO 16, stesso format internazionale dedicato ai frontendisti, per un ritorno grandioso dopo i due anni forzati di stop, che registra una partecipazione di pubblico oltre ogni...

DESIGN FOR HUMANITY / PROGETTARE PER GLI ESSERI UMANI

DESIGN FOR HUMANITY / PROGETTARE PER GLI ESSERI UMANI

Quando si progetta un prodotto, la prima cosa che si fa è conoscere le persone che lo useranno.  I prodotti sono pensati per essere utilizzati da milioni di persone, ma in realtà ogni interazione tra il prodotto/fruitore è personale.  Spesso si tende a...