Mange av dagens mest brukte programmeringsspråk, inkludert Java, C# og Python, kompileres ikke direkte til maskinkode, men til en form for mellomliggende kode som kjøres i en virtuell maskin. Dette betyr at programvaren kan kjøres på tvers av ulike underliggende systemer.
Men de fleste av de virtuelle maskinene som er tilgjengelige, er optimalisert bare for ett eller noen få programmeringsspråk. Dette kan gjøre det vanskeligere og mer ressurskrevende å utvikle og kjøre applikasjoner som er basert på kode skrevet i flere ulike programmeringsspråk.
Det er sjelden at ett og samme programmeringsspråk er det beste valget til alle ulike oppgaver. Derfor foretrekker mange utviklere å kunne velge mellom ulike språk, på samme måte som at en snekker ikke bruker hammeren til alt.
GraalVM
Denne uken avduket Oracle offisielt en ny, virtuell maskin (VM) som Oracle Labs har jobbet med i flere år. Den kalles for GraalVM og omtales som en universell VM som skal kunne tilby høy ytelse for alle programmeringsspråk og legge til rette for kommunikasjon mellom språkene.
Dette skal gjøre det mulig å kjøre for eksempel Ruby i konteksten til Java-applikasjoner.
Som en del av arkitekturen tilbys også felles, språkagnostiske utviklerverktøy som skal gjøre vedlikehold og integrasjon enklere.
Språk og integrasjon
En rekke ulike språk støttes allerede. Dette inkluderer JVM-baserte språk som Java, Scala, Groovy og Kotlin, JavaScript (inkludert som erstatter for V8 i Node.js) og LLVM-bitkode fra programmer programmert i C, C++ eller Rust. I tillegg tilbys eksperimentell støtte for Ruby, R og Python.
GraalVM tilbyr programmeringsgrensesnitt som gjør det mulig for tredjeparter å utvide utvalget av språk som støttes, samt å integrere GraalVM-støtte i andre utviklerverktøy.
Per i dag kan GraalVM kjøres separat, men også som en integrert del av OpenJDK eller Node.js. Ja, det skal til og med være mulig å integrere VM-en i databasesystemer som MySQL og Oracle RDBMS.
Lover bedre ytelse
Vanligvis er det slik at løsninger som skal gjøre mange til lags, må inngå betydelig kompromisser. Ikke minst gjelder dette ytelsen. Men Oracle lover at GraalVM ikke bare skal gi fullgod ytelse som separate VM-er i mange tilfeller.
I en del tilfeller skal ytelsen til og med være betydelig høyere med GraalVM enn med JVM. Dette gjelder ikke minst ved kjøring av JVM-baserte språk som Scala, noe som allerede har fått Twitter til å ta i bruk GraalVM i forbindelse med en håndfull av selskapets Scala-baserte mikrotjenester.
Twitter-utvikleren Christian Thalinger forteller om dette i videoen nedenfor.
GraalVM støtter også ahead-of-time-kompilering (AOT) av eksisterende JVM-applikasjoner. Dette oppretter systemspesifikke binærfiler med maskinkode som kan kjøres umiddelbart, uten den vanlige oppstartskostnaden.
To versjoner
GraalVM 1.0 kommer i to utgaver, Community Edition (CE) og Enterprise Edition (EE).
CE-utgaven er fritt tilgjengelig som åpen kildekode, det meste med vanlig GPL 2-lisens. EE-utgaven kan lastes ned gratis for testing og annen ikke-produksjonsbruk.
De viktigste forskjellene på de to utgavene, i tillegg til prisen, er at EE-utgaven har bedre ytelse, bruker mindre minne, kan kjøre systemspesifikk kode i en sikkerhetssandkasse og også er tilgjengelig for MacOS.
Oracle skal i tillegg tilby kommersiell brukerstøtte til EE-utgaven.
Begge utgavene er tilgjengelige for Linux og kan lastes ned via denne siden.
Leste du denne? Java SE 10 er her allerede