ProHoster > Blog > internetes hírek > A GraalVM virtuális gép 19.3.0-s kiadása és a Python, JavaScript, Ruby és R ezen alapuló megvalósításai
A GraalVM virtuális gép 19.3.0-s kiadása és a Python, JavaScript, Ruby és R ezen alapuló megvalósításai
Oracle Company közzétett univerzális virtuális gép kiadása GraalVM 19.3.0, amely támogatja a futó alkalmazásokat JavaScriptben (Node.js), Pythonban, Rubyban, R-ben, a JVM bármely nyelvén (Java, Scala, Clojure, Kotlin) és azon nyelveken, amelyekhez LLVM bitkód generálható (C, C++). , Rozsda). A 19.3-as ág a Long Term Support (LTS) kiadásnak minősül és figyelemre méltó támogatás 11 JDK, beleértve azt a képességet, hogy a Java kódot futtatható fájlokká fordítsák (GraalVM Native Image). Projekt kód forgalmazza GPLv2 licenccel. Ezzel egy időben megjelentek a Python, JavaScript, Ruby és R nyelvi implementációk GraalVM-et használó új verziói - GraalPython, GraalJS, SzarvasgombaRuby и FastR.
GraalVM biztosítja Egy JIT-fordító, amely bármilyen szkriptnyelvből futtathat kódot a JVM-ben, beleértve a JavaScriptet, a Rubyt, a Pythont és az R-t, és lehetővé teszi natív kód futtatását a JVM-ben LLVM bitkódra konvertálva. A GraalVM által biztosított eszközök közé tartozik egy nyelvfüggetlen hibakereső, egy profilozó rendszer és egy memóriafoglalás-elemző. A GraalVM lehetővé teszi kombinált alkalmazások létrehozását különböző nyelvű komponensekkel, lehetővé téve az objektumok és tömbök elérését más nyelvű kódból. A JVM-alapú nyelvekhez létezik alkalom gépi kódba összeállított futtatható fájlok létrehozása, amelyek minimális memóriafelhasználással közvetlenül végrehajthatók (memória- és szálkezelés a keretrendszer összekapcsolásával valósul meg Szubsztrát VM).
A Node.js 12.10.0-val való kompatibilitás biztosított;
A nem szabványos globális tulajdonságok és funkciók alapértelmezés szerint le vannak tiltva:
global (helyette globalThis, js.global-property visszaállítása), teljesítmény (js.performance), print és printErr (js.print);
Megvalósított Promise.allSettled és nullish összevonási javaslat, amelyek ECMAScript 2020 módban érhetők el ("-js.ecmascript-version=2020");
Az ICU4J függőségek frissítve 64.2-re, az ASM 7.1-re.
Hozzáadott csonkok gc.{enable,disable,isenabled}, implementált charmap_build, sys.hexversion és _lzma;
Frissített Python 3.7.8 szabványos könyvtár;
Támogatás hozzáadva a NumPy 1.16.4-hez és a Pandas 0.25.0-hoz;
Hozzáadott timeit támogatás;
A socket.socket olyan állapotba került, amely lehetővé teszi a „graalpython -m http.server” futtatását és a titkosítatlan (TLS nélküli) http erőforrások betöltését;
Javítva a pandas.DataFrame objektumok megjelenítésével kapcsolatos problémák.
a sorok helytelen feldolgozása bytes.startswith,
az iterátorok destrukturálása és a dict.__contains__ használata szótáraknál;
Támogatás hozzáadva az ast.PyCF_ONLY_AST fájlhoz, amely megengedett biztosítsa a pytest működését;
Hozzáadva támogatás PEP 498 (karakterlánc-interpoláció literálokban);
Megvalósítva a „--python.EmulateJython” jelző a JVM-osztályok normál Python-importálási szintaxissal történő importálásához, és a JVM-kivételek rögzítéséhez Python-kódból;
Továbbfejlesztett elemző teljesítmény, kivétel gyorsítótár,
Python objektumok elérése JVM-kódból. Javított eredmények a Python kód és a natív kiterjesztések teljesítménytesztjei során (a natív kiterjesztések végrehajtása az llvm tetején azt jelenti, hogy az llvm bitkódot átadják a GraalVM-nek a JIT fordításhoz).
A natív kiterjesztések összeállításához most a beépített LLVM eszközkészletet használják, amely natív kódot és bitkódot is létrehoz. Ez azt jelenti, hogy több natív kiterjesztésnek kell lefordítania a dobozból, kiküszöbölve a legtöbb linkelési problémát;
Külön LLVM telepítés a TruffleRuby natív kiterjesztéseinek telepítéséhez;
A C++ kiterjesztések TruffleRuby-ra való telepítéséhez már nincs szükség a libc++ és a libc++abi telepítésére;
Licenc frissítve EPL 2.0/GPL 2.0/LGPL 2.1-re, ugyanaz, mint a legutóbbi JRuby;
Az opcionális argumentumok támogatása hozzáadva a GC.stat fájlhoz;
A Kernel#load metódust egy wrapperrel és a Kernel#spawn-t a :chdir;
Hozzáadott rb_str_drop_bytes, ami nagyszerű, mert az OpenSSL használja;
A Rails 6-ban új sínekhez szükséges előre telepített drágakövek bővítményei;
A natív kiterjesztések összeállításához zászlókat használnak, mint az MRI-nél;
Teljesítményoptimalizálásra került sor, és a memóriafogyasztást csökkentették.
Hozzáadott előzetes támogatás az LLVM-en alapuló natív bővítmények futtatásához. Natív R-csomagok készítésekor a FastR a GraalVM beépített LLVM-eszközeinek használatára van konfigurálva. Az eredményül kapott bináris fájlok natív kódot és LLVM bitkódot is tartalmaznak.
Az előre telepített csomagok is így épülnek fel.
A FastR alapértelmezés szerint betölti és lefuttatja a natív kiterjesztési kódot, de a "--R.BackEnd=llvm" opcióval történő indításkor a bitkód kerül felhasználásra. Az LLVM háttérrendszer szelektíven használható néhány R csomaghoz a "--R.BackEndLLVM=pkg1,pkg2" megadásával. Ha problémái vannak a csomagok telepítésével, mindent visszaállíthat a fastr.setToolchain("native") meghívásával vagy a $FASTR_HOME/etc/Makeconf fájl manuális szerkesztésével;
Ebben a kiadásban a FastR a GCC futásidejű könyvtárai nélkül kerül szállításra;
Javított memóriaszivárgás;
Javítva a problémák nagy vektorokkal (>1 GB) történő munkavégzés során;