Lëshimi 19.3.0 i makinës virtuale GraalVM dhe zbatimet e Python, JavaScript, Ruby dhe R bazuar në të

Kompania Oracle botuar lëshimi i një makinerie virtuale universale GraalVM 19.3.0, i cili mbështet ekzekutimin e aplikacioneve në JavaScript (Node.js), Python, Ruby, R, çdo gjuhë për JVM (Java, Scala, Clojure, Kotlin) dhe gjuhët për të cilat mund të gjenerohet kodi bit LLVM (C, C++ , Ndryshk). Dega 19.3 klasifikohet si lëshim i Mbështetjes Afatgjatë (LTS) dhe jashtëzakonshme mbështetje 11 JDK, duke përfshirë aftësinë për të përpiluar kodin Java në skedarë të ekzekutueshëm (GraalVM Native Image). Kodi i projektit shperndare nga licencuar sipas GPLv2. Në të njëjtën kohë, u lëshuan versione të reja të zbatimeve të gjuhës Python, JavaScript, Ruby dhe R duke përdorur GraalVM - GraalPython, GraalJS, TruffleRuby и FastR.

GraalVM ajo siguron Një përpilues JIT që mund të ekzekutojë kodin nga çdo gjuhë skriptimi në fluturim në JVM, duke përfshirë JavaScript, Ruby, Python dhe R, dhe gjithashtu bën të mundur ekzekutimin e kodit vendas në JVM të konvertuar në kodin bit LLVM. Mjetet e ofruara nga GraalVM përfshijnë një korrigjues të pavarur nga gjuha, një sistem profilizimi dhe një analizues të shpërndarjes së memories. GraalVM bën të mundur krijimin e aplikacioneve të kombinuara me komponentë në gjuhë të ndryshme, duke ju lejuar të aksesoni objekte dhe vargje nga kodi në gjuhë të tjera. Për gjuhët e bazuara në JVM ekziston mundësi krijimi i skedarëve të ekzekutueshëm të përpiluar në kodin e makinës që mund të ekzekutohen drejtpërdrejt me konsum minimal të memories (menaxhimi i memories dhe thread zbatohet përmes lidhjes së kornizës Substrati VM).

Ndryshimet në GraalJS:

  • Sigurohet përputhshmëria me Node.js 12.10.0;
  • Karakteristikat dhe funksionet globale jo standarde janë çaktivizuar si parazgjedhje:
    global (zëvendësuar nga globalThis, vendosja e js.global-property për t'u kthyer), performanca (js.performance), print dhe printErr (js.print);

  • Promise.all u zbatua dhe anuloi propozimin e bashkimit, të cilat janë të disponueshme në modalitetin ECMAScript 2020 (“-js.ecmascript-version=2020”);
  • Varësitë e përditësuara ICU4J në 64.2, ASM në 7.1.

ndryshimet në GraalPython:

  • Studimet e shtuara gc.{enable,disable,isenabled}, implementuar charmap_build, sys.hexversion dhe _lzma;
  • Biblioteka standarde e përditësuar Python 3.7.8;
  • Mbështetje e shtuar për NumPy 1.16.4 dhe Pandas 0.25.0;
  • Mbështetje e shtuar për kohën;
  • socket.socket është sjellë në një gjendje që ju lejon të ekzekutoni "graalpython -m http.server" dhe të ngarkoni burime http të pakriptuara (pa TLS);
  • Rregulloi problemet me shfaqjen e objekteve panda.DataFrame.
    përpunim i gabuar i tuples në bajt.fillon me,
    caktimi destrukturues i iteratorëve dhe përdorimi i dikt.__përmban__ për fjalorë;

  • U shtua mbështetje për ast.PyCF_ONLY_AST, e cila lejohet sigurohuni që pytest të funksionojë;
  • Shtuar mbështetje PEP 498 (interpolimi i vargut në literale);
  • Zbatuar flamuri “--python.EmulateJython” për të importuar klasa JVM duke përdorur sintaksën normale të importit të Python dhe për të kapur përjashtimet JVM nga kodi Python;
  • Performanca e përmirësuar e analizuesit, ruajtja e memories së përjashtimit,
    aksesimi i objekteve të Python nga kodi JVM. Rezultatet e përmirësuara në testet e performancës për kodin python dhe shtesat vendase (ekzekutimi i shtesave vendase në krye të llvm nënkupton që kodi bit llvm i kalohet GraalVM për përpilimin JIT).

ndryshimet në TruffleRuby:

  • Për të përpiluar shtesat vendase, tani përdoret paketa e integruar e veglave LLVM, duke krijuar kodin vendas dhe kodin bit. Kjo do të thotë që më shumë shtesa vendase duhet të përpilohen jashtë kutisë, duke eliminuar shumicën e çështjeve të lidhjes;
  • Instalim i veçantë LLVM për instalimin e shtesave vendase në TruffleRuby;
  • Instalimi i shtesave C++ në TruffleRuby nuk kërkon më instalimin e libc++ dhe libc++abi;
  • Licenca e përditësuar në EPL 2.0/GPL 2.0/LGPL 2.1, njëlloj si JRuby e fundit;
  • Mbështetje e shtuar për argumente opsionale në GC.stat;
  • Zbatoi metodën Kernel#load me një mbështjellës dhe Kernel#spawn me :chdir;
  • U shtua rb_str_drop_bytes, gjë që është e mrekullueshme sepse OpenSSL e përdor atë;
  • Shtesat e përfshira të gurëve të çmuar të para-instaluar të nevojshëm për shinat e reja në Rails 6;
  • Për të përpiluar shtesat vendase, përdoren flamuj, si në MRI;
  • Janë bërë optimizime të performancës dhe konsumi i kujtesës është zvogëluar.

ndryshimet në FastR:

  • Sigurohet përputhshmëria me R 3.6.1;
  • U shtua mbështetje paraprake për ekzekutimin e shtesave vendase bazuar në LLVM. Kur ndërtoni paketa vendase R, FastR është konfiguruar të përdorë veglat e integruara LLVM të GraalVM. Skedarët binare që rezultojnë do të përmbajnë kodin vendas dhe kodin bit LLVM.

    Në këtë mënyrë ndërtohen edhe paketat e para-instaluara.
    FastR ngarkon dhe ekzekuton kodin vendas të shtesës si parazgjedhje, por kur të lansohet me opsionin "--R.BackEnd=llvm", do të përdoret kodi bit. Backend-i LLVM mund të përdoret në mënyrë selektive për disa paketa R duke specifikuar "--R.BackEndLLVM=pkg1,pkg2". Nëse keni probleme me instalimin e paketave, mund të riktheni gjithçka duke telefonuar fastr.setToolchain("native") ose duke redaktuar manualisht skedarin $FASTR_HOME/etc/Makeconf;

  • Në këtë version, FastR dërgohet pa bibliotekat e kohës së ekzekutimit të GCC;
  • Rregulloi rrjedhjet e kujtesës;
  • Rregullohen problemet kur punoni me vektorë të mëdhenj (>1 GB);
  • U zbatua grepRaw, por vetëm për fixed=T.

Burimi: opennet.ru

Shto një koment