A GraalVM 19.3.0 virtuális gép és az azon alapuló Python, JavaScript, Ruby és R megvalósítások kiadása

Oracle vállalat kiadta univerzális virtuális gép kiadása GraalVM 19.3.0, 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 figyelemre méltó támogatással JDK 11, 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 terjesztésre kerül 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 — GraalPython, GraalJS, TruffleRuby és FastR.

GraalVM biztosít 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 lehetőség 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 Substrate VM).

GraalJS-ben bekövetkezett változások:

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

Változások 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 lehetővé tette biztosítani a pytest működését;
  • Hozzáadva Passkey PEP 498 (láncba fűzés literálokban);
  • Megvalósítva lett 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).

Változások 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.

Változások 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

Megbízható hosting vásárlása weboldalak számára, DDoS védelemmel, VPS VDS szerverek. 🔥 Megbízható webtárhely vásárlása DDoS védelemmel, VPS VDS szerverek | ProHoster