Kompania Oracle lĂ«shimi i njĂ« makine virtuale universale , duke mbĂ«shtetur ekzekutimin e aplikacioneve nĂ« JavaScript (Node.js), Python, Ruby, R, çdo gjuhĂ« pĂ«r JVM (Java, Scala, Clojure, Kotlin) dhe gjuhĂ«sh pĂ«r tĂ« cilat mund tĂ« formohet kod pĂ«r LLVM (C, C++, Rust). Analiza 19.3 i pĂ«rket kategorisĂ« sĂ« lĂ«shimeve me mbĂ«shtetje tĂ« gjatĂ« (LTS) dhe mbĂ«shtetje , pĂ«rfshirĂ« mundĂ«sinĂ« e kompilimit tĂ« kodit Java nĂ« skedarĂ« ekzekutivĂ« (GraalVM Native Image). Kodi i projektit nĂ«n licencĂ«n GPLv2. NĂ« tĂ« njĂ«jtĂ«n kohĂ« janĂ« lĂ«shuar versĂŁo tĂ« reja tĂ« implementimeve tĂ« gjuhĂ«ve Python, JavaScript, Ruby dhe R qĂ« pĂ«rdorin GraalVM â , , dhe .
GraalVM JIT-kompiluesi, i cili mund të ekzekutojë në JVM kodin e çdo gjuhë skritore, duke përfshirë JavaScript, Ruby, Python dhe R, si dhe ofron mundësinë e ekzekutimit të kodit natyral në JVM, e transformuar në kod LLVM. Paketa e mjeteve të GraalVM përfshin një debugger që është i pavarur nga gjuhët e programimit, një sistem profilimi dhe një analizator memorie. GraalVM mundëson krijimin e aplikacioneve të kombinuara me komponente në gjuhë të ndryshme, duke lejuar qasje në objekte dhe lista nga kodi i gjuhëve të tjera. Për gjuhët bazuar në JVM ka mundësinë e krijimit të skedarëve ekzekutivë të kompiluar në kod makinerie, të cilat mund të ekzekutohen drejtpërdrejt me konsum të minim të memorjes (menaxhimi i memories dhe rrjedhave është realizuar përmes lidhjes me kuadrin ).
:
- Siguruar përputhshmëria me Node.js 12.10.0;
- Prona dhe funksionet globale jo standarde janë çaktivizuar si parazgjedhje:
global (e zĂ«vendĂ«suar me globalThis, pĂ«r kthimin Ă«shtĂ« parashikuar njĂ« konfigurim js.global-property), performance (js.performance), print dhe printErr (js.print); - JanĂ« realizuar Promise.allSettled dhe propozimi pĂ«r koalicionin nullish, tĂ« cilat janĂ« tĂ« disponueshme nĂ« modalitetin ECMAScript 2020 («âjs.ecmascript-version=2020»);
- Përditësuar varësitë ICU4J në 64.2, ASM në 7.1.
në GraalPython:
- Shtuar mbështetje për gc.{enable,disable,isenabled}, implemented charmap_build, sys.hexversion dhe _lzma;
- Përditësuar biblioteka standarde Python 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ë çuar në një gjendje që lejon ekzekutimin e «graalpython -m http.server» dhe ngarkimin e burimeve http pa enkriptim (pa TLS);
- Korrigjuar problemet që ka lidhje me daljet e objekteve pandas.DataFrame,
përpunimi i gabuar i tupeve në bytes.startswith,
korrigjimi i caktimeve të shkrimit dhe përdorimi i dict.__contains__ për fjalorët; - Shtuar mbështetje për ast.PyCF_ONLY_AST, që siguroi funksionimin e pytest;
- Shtuar PEP 498 (interpolimi i vargjeve në literale);
- flagi «âpython.EmulateJython» pĂ«r importimin e klasave JVM duke pĂ«rdorur sintaksĂ« normale tĂ« Python-it import dhe kapjen e pĂ«rjashtimeve JVM nga kodi nĂ« Python;
- Përmirësuar performanca e parser-it, caching të përjashtimeve,
qasjes në objektet Python nga kodi JVM. Rezultatet e testeve të performancës për kodin python dhe zgjerimet vendase janë përmirësuar (ekzekutimi i zgjerimeve vendase mbi llvm nënkupton se bitcode llvm dërgohet në GraalVM për JIT-kompilim).
në TruffleRuby:
- Për kompilimin e zgjerimeve vendase tani aplikohet instrumenti i integruar LLVM, i cili krijon si kod vendosës ashtu edhe bitcode. Kjo do të thotë se më shumë zgjerime vendase duhet të kompilohen nga kutia, duke lejuar zgjidhjen e shumicës së problemeve të lidhjes;
- Instalimi i veçantë i LLVM për instalimin e zgjerimeve vendase në TruffleRuby;
- Për instalimin e zgjerimeve C++ në TruffleRuby tani nuk kërkohet instalimi i libc++ dhe libc++abi;
- Licenca është përmirësuar në EPL 2.0/GPL 2.0/LGPL 2.1, ashtu si në JRuby të fundit;
- Shtuar mbështetje për argumentet opsionale në GC.stat;
- Implementuar metoda Kernel#load me mbështjellës dhe Kernel#spawn me :chdir;
- Shtuar rb_str_drop_bytes, i njohur për përdorimin e tij nga OpenSSL;
- Inkluduar zgjerimet e gem-eve të paracaktuara, të nevojshme për rails new në Rails 6;
- Për kompilimin e zgjerimeve vendase janë angazhuar flamuj, ashtu si në MRI;
- Kryer optimizime të performancës dhe reduktim të konsumit të memories.
në FastR:
- Siguruar përputhshmërinë me R 3.6.1;
- Shtuar mbështetje të përparuar për ekzekutimin e zgjerimeve vendase të bazuara në LLVM. Gjatë ndërtimit të paketave vendase R, FastR është konfigurur për të përdorur instrumentin e integruar LLVM në GraalVM. Skedarët binarë përfundimtarë do të përmbajnë si kod vendosës ashtu edhe LLVM-bitcode.
Paketat e paracaktuara gjithashtu janë ndërtuar në këtë mënyrë.
FastR ngarkon dhe ekzekuton kodin native tĂ« zgjerimeve si standard, por, kur ekzekutohet me opsionin «âR.BackEnd=llvm», do tĂ« pĂ«rdorĂ« bitcode. Back-end i LLVM mund tĂ« pĂ«rdoret selektivisht pĂ«r disa paketa R, duke specifikuar «âR.BackEndLLVM=pkg1,pkg2». NĂ« rast tĂ« problemeve gjatĂ« instalimit tĂ« paketimeve, mund tĂ« rikthehet çdo gjĂ« prapa duke thirrur fastr.setToolchain(«native») ose duke redaktuar manualisht skedarin $FASTR_HOME/etc/Makeconf; - NĂ« kĂ«tĂ« version FastR ofrohet pa biblioteka GCC runtime;
- Korrigjuar rrjedhjet e memories;
- Problemet e zgjidhura kur punoni me vektorë të mëdhenj (>1GB);
- GrepRaw është realizuar, por vetëm për fixed=T.
Burimi: opennet.ru
