Eldono 19.3.0 de la virtuala maŝino GraalVM kaj efektivigoj de Python, JavaScript, Ruby kaj R bazitaj sur ĝi

Oracle Company eldonita liberigo de universala virtuala maŝino GraalVM 19.3.0, kiu subtenas kurantajn aplikojn en JavaScript (Node.js), Python, Ruby, R, ajnaj lingvoj por la JVM (Java, Scala, Clojure, Kotlin) kaj lingvoj por kiuj LLVM-bitkodo povas esti generita (C, C++). , Rusto). La 19.3 branĉo estas klasifikita kiel Long Term Support (LTS) eldono kaj rimarkinda subteno JDK11, inkluzive de la kapablo kompili Java-kodon en ruleblajn dosierojn (GraalVM Native Image). Projekta kodo distribuita de licencita laŭ GPLv2. En la sama tempo, novaj versioj de Python, JavaScript, Ruby kaj R-lingvefektivigoj uzantaj GraalVM estis publikigitaj - GraalPython, GraalJS, TrufoRuby и RapidaR.

GraalVM provizas JIT-kompililo kiu povas ekzekuti kodon de iu ajn skriptlingvo sur la flugo en la JVM, inkluzive de JavaScript, Ruby, Python kaj R, kaj ankaŭ ebligas ruli indiĝenan kodon en la JVM konvertita al LLVM-bitkodo. La iloj disponigitaj fare de GraalVM inkludas lingv-sendependan erarserĉilon, profilsistemon, kaj memorasigno-analizilon. GraalVM ebligas krei kombinitajn aplikaĵojn kun komponantoj en malsamaj lingvoj, permesante al vi aliri objektojn kaj tabelojn de kodo en aliaj lingvoj. Por JVM-bazitaj lingvoj ekzistas ŝanco kreante ruleblajn dosierojn kompilitajn en maŝinkodon kiu povas esti efektivigita rekte kun minimuma memorkonsumo (memoro kaj fadenadministrado estas efektivigita per ligado de la kadro Substrato VM).

Ŝanĝoj en GraalJS:

  • Kongrueco kun Node.js 12.10.0 estas certigita;
  • Ne-normaj tutmondaj propraĵoj kaj funkcioj estas malŝaltitaj defaŭlte:
    tutmonda (anstataŭigita per globalThis, agordante js.global-property por reveni), rendimento (js.performance), print kaj printErr (js.print);

  • Efektivigita Promise.allSettled kaj nula kunflua propono, kiuj estas haveblaj en ECMAScript 2020-reĝimo ("-js.ecmascript-version=2020");
  • Ĝisdatigitaj dependecoj ICU4J al 64.2, ASM al 7.1.

Ŝanĝoj en GraalPython:

  • Aldonitaj stumps gc.{enable,disable,isenabled}, efektivigis charmap_build, sys.hexversion kaj _lzma;
  • Ĝisdatigita Python 3.7.8 norma biblioteko;
  • Aldonita subteno por NumPy 1.16.4 kaj Pandas 0.25.0;
  • Aldonita timeit subteno;
  • socket.socket estis alportita al stato, kiu permesas al vi ruli "graalpython -m http.server" kaj ŝargi neĉifritajn (sen TLS) http-rimedojn;
  • Korektis problemojn kun montrado de pandoj.DataFrame-objektoj.
    malĝusta prilaborado de opoj en bytes.startswith,
    destrukturigo de iteratoroj kaj uzo de dict.__enhavas__ por vortaroj;

  • Aldonita subteno por ast.PyCF_ONLY_AST, kiu permesite certigi ke pytest funkcias;
  • Aldonita subteno PEP 498 (interpolado de kordoj en literaloj);
  • Efektivigita la flago "--python.EmulateJython" por importi JVM-klasojn uzante normalan Python-import-sintakso kaj kapti JVM-esceptojn de Python-kodo;
  • Plibonigita analizilo-rendimento, esceptkaŝmemoro,
    alirante Python-objektojn de JVM-kodo. Plibonigitaj rezultoj en agadotestoj por python-kodo kaj indiĝenaj etendaĵoj (efektivigi indiĝenajn etendaĵojn aldone al llvm implicas ke bitokodo llvm estas pasita al GraalVM por JIT-kompilo).

Ŝanĝoj en TruffleRuby:

  • Por kompili indiĝenajn etendaĵojn, la enkonstruita LLVM ilaro nun estas uzita, kreante kaj indiĝenan kodon kaj bitokodon. Ĉi tio signifas, ke pli denaskaj etendaĵoj devus kompili el la skatolo, forigante plej multajn ligajn problemojn;
  • Aparta LLVM-instalaĵo por instali indiĝenajn etendaĵojn en TruffleRuby;
  • Instali C++-etendaĵojn sur TruffleRuby ne plu postulas instali libc++ kaj libc++abi;
  • Licenco ĝisdatigita al EPL 2.0/GPL 2.0/LGPL 2.1, sama kiel lastatempa JRuby;
  • Aldonita subteno por laŭvolaj argumentoj al GC.stat;
  • Efektivigis la metodon Kernel#load kun envolvaĵo kaj Kernel#spawn kun :chdir;
  • Aldonita rb_str_drop_bytes, kio estas bonega ĉar OpenSSL uzas ĝin;
  • Inkluditaj etendaĵoj de antaŭinstalitaj gemoj necesaj por reloj novaj en Reloj 6;
  • Por kompili indiĝenajn etendaĵojn oni uzas flagojn, kiel en MRI;
  • Efikecoptimumigoj estis faritaj kaj memorkonsumo estis reduktita.

Ŝanĝoj en FastR:

  • Kongrueco kun R 3.6.1 estas certigita;
  • Aldonita prepara subteno por funkcii denaskaj etendaĵoj bazitaj sur LLVM. Dum konstruado de indiĝenaj R-pakaĵoj, FastR estas agordita por uzi la enkonstruitan LLVM-ilaron de GraalVM. La rezultaj binaraj dosieroj enhavos kaj indiĝenan kodon kaj LLVM-bitkodon.

    Antaŭinstalitaj pakaĵoj ankaŭ estas konstruitaj tiel.
    FastR ŝarĝas kaj rulas indiĝenan etendaĵokodon defaŭlte, sed kiam lanĉite kun la opcio "--R.BackEnd=llvm", bitokodo estos uzata. La backend LLVM povas esti uzata selekteme por iuj R-pakaĵoj specifante "--R.BackEndLLVM=pkg1,pkg2". Se vi havas problemojn instali pakaĵojn, vi povas restarigi ĉion vokante fastr.setToolchain ("denaska") aŭ permane redaktante la dosieron $FASTR_HOME/etc/Makeconf;

  • En ĉi tiu eldono, FastR ekspediĝas sen la GCC rultempaj bibliotekoj;
  • Riparita memorfuĝoj;
  • Korektis problemojn kiam vi laboras kun grandaj vektoroj (>1GB);
  • Efektivigite grepRaw, sed nur por fiksita=T.

fonto: opennet.ru

Aldoni komenton