Oracle vállalat univerzális virtuális gép kiadása , amely támogatja a JavaScript (Node.js), Python, Ruby, R, valamint az JVM-re (Java, Scala, Clojure, Kotlin) és az LLVM bitkódot támogató nyelvek futtatását (C, C++, Rust). A 19.3-as ág a hosszú támogatású (LTS) kiadások közé tartozik, és támogatással , beleértve a Java kód végrehajtható fájlokká (GraalVM Native Image) történő fordításának lehetőségét. A projekt kódja GPLv2 licenc alatt áll. Ezzel egy időben új verziók kerültek kiadásra a GraalVM-ot használó Python, JavaScript, Ruby és R megvalósításokról — , , és .
GraalVM JIT fordító, amely képes a JVM-ben bármely script nyelv kódját, beleértve a JavaScriptet, Rubyt, Pythont és R-t on-the-fly végrehajtani, valamint lehetővé teszi a natív kódot is a JVM-ben végrehajtani, amely LLVM bitkóddá alakult. A GraalVM biztosította eszközkészlet független a programozási nyelvektől, tartalmaz hibakeresőt, profiláló rendszert és memóriaelosztó elemzőt. A GraalVM lehetővé teszi összetett alkalmazások létrehozását különböző nyelvű komponensekkel, lehetővé téve, hogy más nyelvek kódjából objektekhez és tömbökhöz férjünk hozzá. A JVM alapú nyelvekhez olyan végrehajtható fájlok létrehozásával, amelyek közvetlenül futtathatók, minimalizálva a memóriahasználatot (a memória és a szálak kezelése az ).
:
- Kompatibilitás biztosítva a Node.js 12.10.0-val;
- Alapértelmezés szerint letiltották a nem szabványos globális tulajdonságokat és funkciókat:
global (globalThis-ra cserélve, a js.global-property beállítással visszaállítható), performance (js.performance), print és printErr (js.print); - Megvalósították a Promise.allSettled és nullish coalescing ajánlást, amelyek az ECMAScript 2020 módjában elérhetők („--js.ecmascript-version=2020”);
- Az ICU4J függőségeket 64.2-re, az ASM-t 7.1-re frissítették.
a GraalPython-ban:
- Feltüntették a gc.{enable,disable,isenabled} helyettesítőket, megvalósították a charmap_build, sys.hexversion és _lzma; funkciókat;
- A Python 3.7.8 standard könyvtár frissítve lett;
- Támogatja a NumPy 1.16.4-et és a Pandas 0.25.0-t;
- Bővítették a timeit támogatást;
- a socket.socket olyan állapotú lett, amely lehetővé teszi a „graalpython -m http.server” futtatását és nem titkosított (TLS nélküli) http-erőforrások letöltését;
- Kijavították a pandas.DataFrame objektumok kiadásával kapcsolatos problémákat,
a bytes.startswith-ben előforduló tuple-ek helytelen kezelését,
az iterátorok destrukturálás közbeni hozzárendelését és a dict.__contains__ használatát szótáraknál; - Az ast.PyCF_ONLY_AST támogatása került bevezetésre, amely biztosítani a pytest működését;
- Hozzáadva PEP 498 (láncba fűzés literálokban);
- a «—python.EmulateJython» kapcsoló JVM-osztályok importálására normál Python szintaxissal importált kódon keresztül és JVM-kivételkezelés Python kódból;
- Javították a parser, a kivételek gyorsítótárának teljesítményét,
a Python objektumokhoz való hozzáférést JVM-kódból. A Python kód és a natív kiterjesztések teljesítménytesztjeinek eredményei javultak (natív kiterjesztések végrehajtása az llvm felett azt jelenti, hogy az llvm bitkód átkerül a GraalVM-hez JIT-kompilálásra).
a TruffleRuby-ban:
- A natív kiterjesztések fordításához most beépített LLVM eszköztárat használnak, amely natív kódot és bitkódot is előállít. Ez azt jelenti, hogy több natív kiterjesztést dobozból kelthetünk, lehetővé téve a legtöbb linkelési problémák kezelését;
- Külön LLVM telepítés a natív kiterjesztések TruffleRuby-ba való telepítéséhez;
- C++ kiterjesztések telepítéséhez a TruffleRuby-ba már nem szükséges libc++ és libc++abi telepítése;
- A licenc frissítve lett EPL 2.0/GPL 2.0/LGPL 2.1-re, ahogyan a nemrégiben megjelent JRuby-ban is;
- Támogatást kapott az opcionális argumentumok a GC.stat-ban;
- Megvalósították a Kernel#load wrapper-t és a Kernel#spawn-t :chdir paraméterrel;
- Hozzáadva a rb_str_drop_bytes, amely különösen figyelemre méltó, mivel az OpenSSL használja;
- A telepített gem-ek szükséges kiterjesztései beépítve a rails new-hoz a Rails 6-ban;
- A natív kiterjesztések fordításához hasonló kapcsolók kerültek alkalmazásra, mint az MRI esetében;
- Teljesítményoptimalizálásokat hajtottak végre, és csökkentették a memóriafogyasztást.
a FastR-ben:
- Kompatibilitás biztosítva a R 3.6.1-gyel;
- Előzetes támogatás a natív kiterjesztések végrehajtására LLVM alapú megoldásokkal. Natív R csomagok összeállításakor a FastR-t a GraalVM beépített LLVM eszköztár használatára konfigurálják. Az eredmény bináris fájlok natív kódot és LLVM-bitkódot is tartalmaznak.
A telepített csomagok is így készültek.
A FastR alapértelmezettként betölti és végrehajtja a natív kiterjesztések kódját, de amikor a «—R.BackEnd=llvm» opcióval fut, bitkódot használ. Az LLVM háttérmeghajtó szelektíven használható egyes R csomagoknál a «—R.BackEndLLVM=pkg1,pkg2» megadásával. Csomagok telepítési problémái esetén vissza lehet állítani mindent az fastr.setToolchain(«native») vagy a $FASTR_HOME/etc/Makeconf fájl manuális módosításával; - Ebben a kiadásban a FastR GCC runtime könyvtárak nélkül érkezik;
- Memóriaszivárgások javítva;
- Problémák javítva nagy vektorokkal kapcsolatban (>1GB);
- Megvalósult a grepRaw, de csak fixed=T esetén.
Forrás: opennet.ru
