Oracle utgivelsen av den universelle virtuelle maskinen , som støtter kjøring av applikasjoner skrevet i JavaScript (Node.js), Python, Ruby, R, og alle språk for JVM (Java, Scala, Clojure, Kotlin), samt språk som kan generere LLVM-bitkode (C, C++, Rust). Versjon 19.3 er kategorisert som en utgivelse med langvarig støtte (LTS) og støtte for , inkludert muligheten til å kompilere Java-kode til kjørbare filer (GraalVM Native Image). Koden til prosjektet er lisensiert under GPLv2. Samtidig ble nye versjoner av språkimplementasjonene som bruker GraalVM, Python, JavaScript, Ruby og R, utgitt — , , og .
GraalVM JIT-kompilatoren som kan utføre kode skrevet i alle skriptspråk i JVM, inkludert JavaScript, Ruby, Python og R, og gir mulighet for å kjøre nativen kode i JVM, omformet til LLVM-bitkode. Verktøyene levert av GraalVM inkluderer språk-uavhengige debugger, profileringssystem og minnefordelingsanalysator. GraalVM gir mulighet for å lage sammensatte applikasjoner med komponenter skrevet i forskjellige språk, og tillater tilgang til objekter og arrays fra kode skrevet i andre språk. For språk basert på JVM er det til å lage kjørbare filer kompilert til maskinkode, som kan kjøres direkte med minimalt minneforbruk (minne- og trådadministrasjon er implementert gjennom tilkobling av rammeverket ).
:
- Kompatibiliteten med Node.js 12.10.0 er sikret;
- Ikke-standard globale egenskaper og funksjoner er deaktivert som standard:
global (erstatning med globalThis, for å gjenopprette er det en innstilling js.global-property), performance (js.performance), print og printErr (js.print); - Promise.allSettled og nullish coalescing proposal er implementert, tilgjengelig i ECMAScript 2020-modus («—js.ecmascript-version=2020»);
- Avhengighetene ICU4J er oppdatert til 64.2, ASM til 7.1.
i GraalPython:
- Stubber for gc.{enable,disable,isenabled} er lagt til, charmap_build, sys.hexversion og _lzma er implementert;
- Standardbiblioteket Python 3.7.8 er oppdatert;
- Støtte for NumPy 1.16.4 og Pandas 0.25.0 er lagt til;
- Støtte for timeit er lagt til;
- socket.socket er brakt til en tilstand som tillater kjøring av «graalpython -m http.server» og lasting av ukrypterte (uten TLS) http-ressurser;
- Problemer knyttet til utskrift av pandas.DataFrame-objekter er rettet,
og feilaktig behandling av tupler i bytes.startswith,
destrukturerende tildeling av iteratorer og bruk av dict.__contains__ for ordbøker; - Støtte for ast.PyCF_ONLY_AST er lagt til, noe som å sikre fungeringen av pytest;
- Lagt til PEP 498 (strenginterpolering i litteraler);
- flagget «—python.EmulateJython» for import av JVM-klasser ved hjelp av vanlig Python-syntaks import og fangst av JVM-unntak fra Python-kode;
- Ytelsen til parseren, unntaksbuffer og
tilgang til Python-objekter fra JVM-kode har blitt forbedret. Resultatene i ytelsestester for Python-kode og native utvidelser har blitt bedre (kjøring av native utvidelser på toppen av llvm innebærer at bitcode llvm overføres til GraalVM for JIT-kompilering).
i TruffleRuby:
- For kompilering av native utvidelser brukes nå det innebygde LLVM-verktøysettet, som skaper både native kode og bitcode. Dette betyr at flere native utvidelser nå bør kunne kompileres rett ut av boksen, og løse de fleste sammenslåingsproblemene;
- Separat installasjon av LLVM for installasjon av native utvidelser i TruffleRuby;
- For installasjon av C++ utvidelser i TruffleRuby er det ikke nødvendig med installasjon av libc++ og libc++abi;
- Lisensen er oppdatert til EPL 2.0/GPL 2.0/LGPL 2.1, som nylig i JRuby;
- Støtte for valgfrie argumenter i GC.stat er lagt til;
- Metoden Kernel#load med innpakning og Kernel#spawn med :chdir er implementert;
- rb_str_drop_bytes er lagt til, bemerkelsesverdig fordi den brukes av OpenSSL;
- Inkludert er nødvendige utvidelser av forhåndsinstallerte gem-er for rails new i Rails 6;
- Flaggene for kompilering av native utvidelser er aktivert, som i MRI;
- Ytelsesforbedringer og redusert minneforbruk er gjort.
i FastR:
- Kompatibilitet med R 3.6.1 er sikret;
- Foreløpig støtte for kjøring av native utvidelser basert på LLVM er lagt til. Ved bygging av native R-pakker er FastR konfigurert for å bruke det innebygde GraalVM LLVM-verktøyet. De resulterende binærfilene vil inneholde både native kode og LLVM-bitcode.
Forhåndsinstallerte pakker er også bygget på denne måten.
FastR laster og kjører native koden til utvidelser som standard, men når den kjøres med alternativet «—R.BackEnd=llvm», vil bitcode bli brukt. LLVM-backend kan brukes selektivt for enkelte R-pakker ved å spesifisere «—R.BackEndLLVM=pkg1,pkg2». Ved installasjonsproblemer kan alt gjenopprettes ved å kalle fastr.setToolchain(«native») eller manuelt redigere filen $FASTR_HOME/etc/Makeconf; - I denne utgaven leveres FastR uten GCC runtime-biblioteker;
- Minnelekkasjer er rettet opp;
- Problemer med store vektorer (>1GB) er rettet opp;
- grepRaw er implementert, men kun for fixed=T.
Kilde: opennet.ru
