Kompania Oracle lĂ«shimi i njĂ« makine virtuale universale , qĂ« 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Ă« formohet bitkodi LLVM (C, C++, Rust). Dega 19.3 i pĂ«rket kategorisĂ« sĂ« lĂ«shimeve me mbĂ«shtetje afatgjatĂ« (LTS) dhe tekstit alternativ , duke pĂ«rfshirĂ« mundĂ«sinĂ« e kompaktimit tĂ« kodit Java nĂ« skedarĂ« ekzekutues (GraalVM Native Image). Kodi i projektit nĂ«n licencĂ«n GPLv2. NdĂ«rkohĂ« janĂ« lĂ«shuar versionet e reja tĂ« implementimeve tĂ« gjuhĂ«ve Python, JavaScript, Ruby dhe R qĂ« pĂ«rdorin GraalVM â , , dhe .
GraalVM JIT compiler që mund të ekzekutojë në fluks kodin e çdo gjuhe skriptuese në JVM, duke përfshirë JavaScript, Ruby, Python dhe R, si edhe jep mundësinë për të ekzekutuar kodin natyror në JVM, të konvertuar në bitkod LLVM. Mjeti ofruar nga GraalVM përfshin një debugguer, sistem profilizimi dhe analizator të shpërndarjes së memories, që janë të pavarura nga gjuhët e programimit. GraalVM ofron mundësinë për të krijuar aplikacione të kombinuara me komponentë në gjuhë të ndryshme, duke lejuar qasjen në objekte dhe array nga kodi në gjuhë të tjera. Për gjuhët bazuar në JVM ekziston krijimi i skedave ekzekutues që janë të kompaktura në kod makinerie, të cilat mund të ekzekutohen drejtpërdrejt me konsum minimal të memorjes (menaxhimi i memories dhe rrjedhave është realizuar përmes integrimit të kornizës ).
:
- Siguruar përputhshmërinë me Node.js 12.10.0;
- Të gjitha pronësitë dhe funksionet globale jo standard janë çaktivizuar për default:
global (zĂ«vendĂ«suar me globalThis, pĂ«r tĂ« rikthyer Ă«shtĂ« parashikuar konfigurimi js.global-property), performance (js.performance), print dhe printErr (js.print); - JanĂ« implementuar Promise.allSettled dhe propozimi pĂ«r inkorporimin e null, qĂ« janĂ« tĂ« aksesueshĂ«m nĂ« modalitetin ECMAScript 2020 («âjs.ecmascript-version=2020»);
- Shtimi i varësive ICU4J në 64.2, ASM në 7.1.
në GraalPython:
- Shtuar stubs gc.{enable,disable,isenabled}, implementuar charmap_build, sys.hexversion dhe _lzma;
- Biblioteka standarde Python e përditësuar në 3.7.8;
- Shtuar mbështetje për NumPy 1.16.4 dhe Pandas 0.25.0;
- Shtuar mbështetje për timeit;
- socket.socket është sjellë në një gjendje që lejon ekzekutimin e «graalpython -m http.server» dhe ngarkimin e burimeve http të pa koduara (pa TLS);
- Rregulluar problematikat që lidhen me daljen e objekteve pandas.DataFrame,
përpunimi jo korrekt i tupleve në bytes.startswith,
dhe përdorimi i assignimeve destrukturizuese të iteratorëve dhe dict.__contains__ për fjalorët; - Shtuar mbështetje për ast.PyCF_ONLY_AST, e cila siguroi punën e pytest;
- Shtuar PEP 498 (interpolimi i vargjeve në literale);
- flagu «âpython.EmulateJython» pĂ«r importimin e klasave JVM duke pĂ«rdorur sintaksĂ«n normale tĂ« Python dhe kapjen e pĂ«rjashtimeve JVM nga kodi nĂ« Python;
- Përmirësuar performanca e parser-it, memorizimi i përjashtimeve,
qasje në objektet Python nga kodi JVM. Janë përmirësuar rezultatet në testet e performancës për kodin python dhe zgjerimet natyrore (ekzekutimi i zgjerimeve natyrore mbi llvm nënkupton se bitcode llvm transferohet në GraalVM për kompilimin JIT).
në TruffleRuby:
- Për kompilimin e zgjerimeve natyrore tani përdoret vegla e ndërtuar LLVM, e cila krijon si kod natyror, ashtu edhe bitcode. Kjo do të thotë se më shumë zgjerime natyrore duhet të kompilohen nga kuti, duke zgjidhur shumicën e problemeve të lidhjes;
- Instalimi i veçantë i LLVM për instalimin e zgjerimeve natyrore në TruffleRuby;
- Për instalimin e zgjerimeve C++ në TruffleRuby tani nuk kërkohet instalimi i libc++ dhe libc++abi;
- Licenca është përditësuar në EPL 2.0/GPL 2.0/LGPL 2.1, si në JRuby e fundit;
- Mbështetje për argumentet opsionale në GC.stat është shtuar;
- Metoda Kernel#load është implementuar me mbështjellës dhe Kernel#spawn me :chdir;
- rb_str_drop_bytes është shtuar, i njohur për përdorimin e tij nga OpenSSL;
- Zgjerimet e gem-eve të paracaktuara, të nevojshme për rails new në Rails 6, janë përfshirë;
- Për kompilimin e zgjerimeve natyrore janë angazhuar flakë, si në MRI;
- Janë bërë optimizime të performancës dhe është reduktuar konsumimi i memories.
në FastR:
- Siguruar përputhshmërinë me R 3.6.1;
- Mbështetje e parakohshme për ekzekutimin e zgjerimeve natyrore të bazuara në LLVM është shtuar. Kur ndërtimi i paketave natyrore R FastR është konfigurimi për përdorimin e veglave të ndërtuara në GraalVM. Skedarët binarë të rezultatit do të përmbajnë si kod natyror ashtu edhe LLVM-bitcode.
Paketat e paracaktuara gjithashtu janë ndërtuar në këtë mënyrë.
FastR ngarkon dhe ekzekuton kodin natyror tĂ« zgjerimeve nĂ« mĂ«nyrĂ« tĂ« paracaktuar, por, kur ekzekutohet me opsionin «âR.BackEnd=llvm», do tĂ« pĂ«rdoret bitcode. LLVM backend mund tĂ« pĂ«rdoret zgjedhshĂ«m pĂ«r disa paketa R, duke treguar «âR.BackEndLLVM=pkg1,pkg2». NĂ«se ka probleme gjatĂ« instalimit tĂ« paketave, mund tĂ« ktheheni prapa duke thirrur fastr.setToolchain(«native») ose duke redaktuar manualisht skedarin $FASTR_HOME/etc/Makeconf; - NĂ« kĂ«tĂ« version, FastR vjen pa bibliotekat GCC runtime;
- Janë korrigjuar rrjedhjet e memories;
- Janë korrigjuar problemet me vektorët e mëdhenj (>1GB);
- GrepRaw është implementuar, por vetëm për fixed=T.
Burimi: opennet.ru
