GraalVM e programmi nativi Java
INTRODUZIONE
Per il mondo IT, Java e la sua JVM è stata una vera e propria rivoluzione. La possibilità di poter eseguire lo stesso codice in più architetture era un sogno che grazie alla JVM è divenuto realtà.Ma come spesso accade non è tutto oro quel che luccica, infatti Java tra le altre cose ha avuto sempre un problema circa l'utilizzo delle risorse. Il più delle volte è stato troppo oneroso al pari di programmi nativi.
Negli anni, e fino alla versione 6 della JDK, GJC è stata un ottima scelta per creare codice nativo al pari del codice C
Purtroppo è stato deciso di abbandonare il progetto, la versione 6 è stata l'ultima supportata.
Nel panorama odierno ci sono pochissime scelte, una tra queste è Excelsior Jet che però è a pagamento.
GRAALVM
GraalVM è un prodotto Oracle che è in grado di creare eseguibili nativi partendo da un JAR (o una classe). Inoltre si candida come VM (Virtual Machine) unica per poter eseguire codice scritto in:
- Java
- Python
- C
- Scala
- Ruby
- R
- Javascript / Node JS
COMPILARE ESEGUIBILI NATIVI CON GRAALVM
Di seguito un semplice esempio di utilizzo. Traduceremo il primo nostro Hello World da java a codice nativo!- Installare GraalVM secondo le istruzioni ufficiali
- Effettuare il clone di questo progetto github
- Compilare il codice java
- javac HelloWorld.java
- Eseguire il comando di GraalVM
- native-image HelloWorld
- Finito!!!
CONCLUSIONI
Naturalmente l'esempio HelloWorld è sempre bugiardo... Volevo inserire in questo posto la traduzione di progetto molto complesso: il daemon principale di IOTAPurtroppo ho ancora qualche problema con il build del progetto perchè una libreria (RockDB) fa riferimento a degli shared object (.so) che non riesco proprio a fargli digerire.
Per completezza di seguito trovate il comando per lanciare la compilazione di IRI
native-image -H:+JNI \
-Djava.library.path=/home/fabry/iri-native/clibraries \
--report-unsupported-elements-at-runtime \
--rerun-class-initialization-at-runtime=zmq.util.Utils,com.iota.iri.network.Node \
--delay-class-initialization-to-runtime=org.rocksdb.RocksObject \
-jar iri-1.5.5.jar
Vi farò sapere chi vincerà questa sfida!
Alla prossima
Commenti
Posta un commento