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).

Változások a GraalJS-ben:

  • 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.

változások a GraalPythonban:

  • 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).

változások a TruffleRuby-ban:

  • 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.

változások a FastR-ben:

  • Az R 3.6.1-gyel való kompatibilitás biztosított;
  • 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;
  • A grepRaw implementálva, de csak afix=T esetén.

Forrás: opennet.ru

Hozzászólás