Vrystelling 19.3.0 van die GraalVM virtuele masjien en implementering van Python, JavaScript, Ruby en R gebaseer daarop

Oracle Maatskappy gepubliseer vrystelling van 'n universele virtuele masjien GraalVM 19.3.0, wat lopende toepassings in JavaScript (Node.js), Python, Ruby, R, enige tale vir die JVM (Java, Scala, Clojure, Kotlin) en tale ondersteun waarvoor LLVM-biskode gegenereer kan word (C, C++) , Roes). Die 19.3-tak word geklassifiseer as 'n langtermynondersteuning (LTS) vrystelling en merkwaardig ondersteuning JDK11, insluitend die vermoë om Java-kode saam te stel in uitvoerbare lêers (GraalVM Native Image). Projek kode versprei deur gelisensieer onder GPLv2. Terselfdertyd is nuwe weergawes van Python-, JavaScript-, Ruby- en R-taalimplementerings wat GraalVM gebruik, vrygestel - GraalPython, GraalJS, TruffelRuby и FastR.

GraalVM bied 'n JIT-samesteller wat kode van enige skriftaal op die vlug in die JVM kan uitvoer, insluitend JavaScript, Ruby, Python en R, en dit ook moontlik maak om inheemse kode in die JVM wat na LLVM-biskode omgeskakel is, te laat loop. Die gereedskap wat deur GraalVM verskaf word, sluit 'n taalonafhanklike ontfouter, 'n profileringstelsel en 'n geheuetoewysingsontleder in. GraalVM maak dit moontlik om gekombineerde toepassings met komponente in verskillende tale te skep, waardeur u toegang tot voorwerpe en skikkings vanaf kode in ander tale kan kry. Vir JVM-gebaseerde tale is daar geleentheid die skep van uitvoerbare lêers wat in masjienkode saamgestel is wat direk uitgevoer kan word met minimale geheueverbruik (geheue- en draadbestuur word geïmplementeer deur die raamwerk te verbind Substraat VM).

Veranderinge in GraalJS:

  • Verenigbaarheid met Node.js 12.10.0 word verseker;
  • Nie-standaard globale eienskappe en funksies is by verstek gedeaktiveer:
    global (vervang deur globalThis, stel js.global-property om terug te keer), prestasie (js.performance), print and printErr (js.print);

  • Geïmplementeerde Promise.allSettled en nietige samesmeltingsvoorstel, wat beskikbaar is in ECMAScript 2020-modus ("-js.ecmascript-version=2020");
  • Opgedateerde afhanklikhede ICU4J na 64.2, ASM na 7.1.

veranderinge in GraalPython:

  • Bygevoeg stubs gc.{enable,disable,isenabled}, geïmplementeer charmap_build, sys.hexversion en _lzma;
  • Bygewerkte Python 3.7.8 standaard biblioteek;
  • Bygevoeg ondersteuning vir NumPy 1.16.4 en Pandas 0.25.0;
  • Bygevoeg timeit ondersteuning;
  • socket.socket is na 'n toestand gebring wat jou toelaat om "graalpython -m http.server" te laat loop en ongeënkripteerde (sonder TLS) http-bronne te laai;
  • Probleme opgelos met die vertoon van pandas.DataFrame-voorwerpe.
    verkeerde verwerking van tupels in bytes.startswith,
    destrukturering opdrag van iterators en gebruik van dict.__bevat__ vir woordeboeke;

  • Bygevoeg ondersteuning vir ast.PyCF_ONLY_AST, wat toegelaat verseker dat pytest werk;
  • Bygevoeg ondersteun PEP 498 (stringinterpolasie in letterlike);
  • Geïmplementeer die “--python.EmulateJython”-vlag om JVM-klasse in te voer deur normale Python-invoersintaksis in te voer en JVM-uitsonderings van Python-kode op te vang;
  • Verbeterde ontlederprestasie, uitsonderingskas,
    toegang tot Python-voorwerpe vanaf JVM-kode. Verbeterde resultate in prestasietoetse vir luislangkode en inheemse uitbreidings (die uitvoering van inheemse uitbreidings bo-op llvm impliseer dat bitkode llvm na GraalVM oorgedra word vir JIT-samestelling).

veranderinge in TruffleRuby:

  • Om inheemse uitbreidings saam te stel, word die ingeboude LLVM-gereedskapstel nou gebruik, wat beide inheemse kode en bitkode skep. Dit beteken dat meer inheemse uitbreidings uit die boks moet saamstel, wat die meeste koppelkwessies uitskakel;
  • Afsonderlike LLVM-installasie vir die installering van inheemse uitbreidings in TruffleRuby;
  • Die installering van C++-uitbreidings op TruffleRuby vereis nie meer die installering van libc++ en libc++abi nie;
  • Lisensie opgedateer na EPL 2.0/GPL 2.0/LGPL 2.1, dieselfde as onlangse JRuby;
  • Bygevoeg ondersteuning vir opsionele argumente by GC.stat;
  • Implementeer die Kernel#load metode met 'n omhulsel en Kernel#spawn met :chdir;
  • Bygevoeg rb_str_drop_bytes, wat wonderlik is omdat OpenSSL dit gebruik;
  • Ingesluit uitbreidings van vooraf geïnstalleerde juwele wat nodig is vir relings nuut in Rails 6;
  • Om inheemse uitbreidings saam te stel, word vlae gebruik, soos in MRI;
  • Werkverrigtingoptimalisasies is gemaak en geheueverbruik is verminder.

veranderinge in FastR:

  • Verenigbaarheid met R 3.6.1 word verseker;
  • Bygevoeg voorlopige ondersteuning vir die uitvoer van inheemse uitbreidings gebaseer op LLVM. Wanneer inheemse R-pakkette gebou word, is FastR gekonfigureer om GraalVM se ingeboude LLVM-gereedskap te gebruik. Die gevolglike binêre lêers sal beide inheemse kode en LLVM biskode bevat.

    Vooraf geïnstalleerde pakkette word ook op hierdie manier gebou.
    FastR laai en loop by verstek inheemse uitbreidingskode, maar wanneer dit met die "--R.BackEnd=llvm" opsie geloods word, sal bitkode gebruik word. Die LLVM-agterkant kan selektief vir sommige R-pakkette gebruik word deur "--R.BackEndLLVM=pkg1,pkg2" te spesifiseer. As jy probleme ondervind met die installering van pakkette, kan jy alles terugstel deur fastr.setToolchain("native") te skakel of die $FASTR_HOME/etc/Makeconf-lêer handmatig te redigeer;

  • In hierdie vrystelling word FastR sonder die GCC-looptydbiblioteke gestuur;
  • Vaste geheue lekkasies;
  • Probleme opgelos wanneer met groot vektore (>1GB) gewerk word;
  • Geïmplementeer grepRaw, maar slegs vir fixed=T.

Bron: opennet.ru

Voeg 'n opmerking