Compania Oracle lansarea unei mașini virtuale universale , care suportă rularea aplicațiilor în JavaScript (Node.js), Python, Ruby, R, orice limbaj pentru JVM (Java, Scala, Clojure, Kotlin) și limbaje pentru care poate fi generat cod LLVM (C, C++, Rust). Ramura 19.3 este clasificată ca o versiune cu suport pe termen lung (LTS) și cu suport , inclusiv cu capacitatea de a compila cod Java în fișiere executabile (GraalVM Native Image). Codul proiectului se află sub licența GPLv2. În același timp, au fost lansate versiuni noi ale implementărilor limbajelor Python, JavaScript, Ruby și R care utilizează GraalVM — , , și .
GraalVM un compilator JIT care poate executa în JVM cod din orice limbaje de scriptare, inclusiv JavaScript, Ruby, Python și R, precum și permite rularea codului nativ în JVM, transformat în cod LLVM. Instrumentele oferite de GraalVM includ un debugger independent de limbaj, un sistem de profilare și un analizor de distribuție a memoriei. GraalVM permite crearea de aplicații combinate cu componente în diferite limbaje, permițând accesarea obiectelor și array-urilor din cod în alte limbaje. Pentru limbajele bazate pe JVM există capacitatea de a crea fișiere executabile compilate în cod mașină, care pot fi rulante direct cu un consum minim de memorie (gestionarea memoriei și a thread-urilor este realizată prin integrarea framework-ului ).
:
- Compatibilitate asigurată cu Node.js 12.10.0;
- Proprietățile și funcțiile globale nestandard sunt dezactivate implicit:
global (înlocuit cu globalThis, pentru revenire există setarea js.global-property), performance (js.performance), print și printErr (js.print); - Implementate Promise.allSettled și propunerea de coalescență nullish, disponibile în modul ECMAScript 2020 («—js.ecmascript-version=2020»);
- Dependențele ICU4J actualizate la 64.2, ASM la 7.1.
în GraalPython:
- Adăugate stub-uri gc.{enable,disable,isenabled}, implementate charmap_build, sys.hexversion și _lzma;
- Biblioteca standard Python 3.7.8 actualizată;
- Suport adăugat pentru NumPy 1.16.4 și Pandas 0.25.0;
- Suport adăugat pentru timeit;
- socket.socket a fost adus într-o stare care permite rularea „graalpython -m http.server” și încărcarea resurselor http necriptate (fără TLS);
- Problemele legate de output-ul obiectelor pandas.DataFrame au fost corectate,
întreținerea incorectă a tuplelor în bytes.startswith,
atribuirea destructuratoare a iteratoarelor și utilizarea dict.__contains__ pentru dicționare; - A fost adăugată suport pentru ast.PyCF_ONLY_AST, care asigurarea funcționării pytest;
- Adăugat PEP 498 (interpolarea șirurilor în litere);
- flag-ul „—python.EmulateJython” pentru importarea claselor JVM folosind sintaxa de import Python normală și gestionarea excepțiilor JVM din codul Python;
- Performanța parser-ului, cache-ului de excepții,
accesului la obiectele Python din codul JVM a fost îmbunătățită. Rezultatele în testele de performanță pentru codul Python și extensiile native au fost îmbunătățite (execuția extensiilor native peste llvm implică faptul că bitcode-ul llvm este transmis GraalVM pentru JIT-compilare).
în TruffleRuby:
- Pentru compilarea extensiilor native, se utilizează acum un set de instrumente LLVM încorporat, care creează atât cod nativ, cât și bitcode. Aceasta înseamnă că mai multe extensii native ar trebui să fie compilabile din cutie, rezolvând majoritatea problemelor legate de linkare;
- Instalare separată LLVM pentru instalarea extensiilor native în TruffleRuby;
- Pentru instalarea extensiilor C++ în TruffleRuby, nu mai este necesară instalarea libc++ și libc++abi;
- Licența a fost actualizată la EPL 2.0/GPL 2.0/LGPL 2.1, la fel ca în recentul JRuby;
- A fost adăugată suport pentru argumente opționale în GC.stat;
- Metoda Kernel#load a fost implementată cu o înfășurare și Kernel#spawn cu :chdir;
- A fost adăugat rb_str_drop_bytes, notabil pentru că este utilizat de OpenSSL;
- Au fost incluse extensiile gem-urilor preinstalate necesare pentru rails new în Rails 6;
- Pentru compilarea extensiilor native, au fost folosite flag-uri, ca în MRI;
- Au fost făcute optimizări de performanță și a fost redus consumul de memorie.
în FastR:
- A fost asigurată compatibilitatea cu R 3.6.1;
- A fost adăugată suport preliminar pentru execuția extensiilor native bazate pe LLVM. La construirea pachetelor native R, FastR este configurat să utilizeze setul de instrumente LLVM încorporat în GraalVM. Fișierele binare rezultate vor conține atât cod nativ, cât și LLVM-bitcode.
Pachetele preinstalate sunt de asemenea construite în acest mod.
FastR încarcă și execută cod nativ al extensiilor în mod implicit, dar, când este pornit cu opțiunea „—R.BackEnd=llvm”, se va folosi bitcode. Backend-ul LLVM poate fi utilizat selectiv pentru unele pachete R specificând „—R.BackEndLLVM=pkg1,pkg2”. În cazul problemelor la instalarea pachetelor, se poate reveni la toate setările anterioare apelând fastr.setToolchain(„native”) sau editând manual fișierul $FASTR_HOME/etc/Makeconf; - În această versiune, FastR vine fără bibliotecile runtime GCC;
- Au fost corectate scurgerile de memorie;
- Au fost remediate problemele legate de lucrul cu vectori mari (>1GB);
- A fost implementat grepRaw, dar doar pentru fixed=T.
Sursa: opennet.ro
