Lansarea 19.3.0 a Mașinii Virtuale GraalVM și a implementărilor Python, JavaScript, Ruby și R pe baza acesteia

Compania Oracle a publicat lansarea unei mașini virtuale universale GraalVM 19.3.0, 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 este deosebită cu suport JDK 11, inclusiv cu capacitatea de a compila cod Java în fișiere executabile (GraalVM Native Image). Codul proiectului se răspândește 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 — GraalPython, GraalJS, TruffleRuby și FastR.

GraalVM oferă 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ă posibilitatea 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 Substrate VM).

Modificări în GraalJS:

  • 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.

Modificări î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 a permis asigurarea funcționării pytest;
  • Adăugat suport pentru PEP 498 (interpolarea șirurilor în litere);
  • Implementat 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).

Modificări î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.

Modificări î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

Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS 🔥 Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS | ProHoster