Spoločnosť Oracle vydanie univerzálnej virtuálnej mašiny , podporujúcej spustenie aplikácií v JavaScripte (Node.js), Pythone, Ruby, R, akýchkoľvek jazykoch pre JVM (Java, Scala, Clojure, Kotlin) a jazykoch, pre ktoré sa môže generovať bitcode LLVM (C, C++, Rust). Vetva 19.3 bola zaradená do kategórie vydaní s dlhodobou podporou (LTS) a podporou , vrátane možnosti kompilácie Java kódu do spustiteľných súborov (GraalVM Native Image). Kód projektu pod licenciou GPLv2. Súčasne boli vydané nové verzie jazykových implementácií GraalVM pre Python, JavaScript, Ruby a R — , , a .
GraalVM JIT kompiler, ktorý môže za behu vykonávať v JVM kód akýchkoľvek skriptovacích jazykov, vrátane JavaScriptu, Ruby, Pythona a R, a tiež umožňuje spúšťanie natívneho kódu v JVM, pretransformovaného na bitcode LLVM. Poskytovaný GraalVM nástrojový súbor obsahuje nezávislý od jazykov debugger, systém profilovania a analyzátor rozdelenia pamäte. GraalVM umožňuje vytvárať kombinované aplikácie s komponentami v rôznych jazykoch, pričom umožňuje prístup k objektom a poľom z kódu v iných jazykoch. Pre jazyky založené na JVM je k dispozícii vytváranie skompilovaných do strojového kódu spustiteľných súborov, ktoré sa dajú vykonávať priamo s minimálnou spotrebou pamäte (správa pamäte a vlákien je realizovaná prostredníctvom pripojenia rámca ).
:
- Bola zabezpečená kompatibilita s Node.js 12.10.0;
- Neštandardné globálne vlastnosti a funkcie sú vo výrobných nastaveniach predvolene zakázané:
global (nahradené globalThis, pre návrat je k dispozícii nastavenie js.global-property), performance (js.performance), print a printErr (js.print); - Implementované Promise.allSettled a nullish coalescing proposal, ktoré sú k dispozícii v režime ECMAScript 2020 („—js.ecmascript-version=2020“);
- Závislosti ICU4J boli aktualizované na 64.2, ASM na 7.1.
v GraalPython:
- Boli pridané zástupné symboly gc.{enable,disable,isenabled}, implementované charmap_build, sys.hexversion a _lzma;
- Aktualizovaná štandardná knižnica Python 3.7.8;
- Pridaná podpora pre NumPy 1.16.4 a Pandas 0.25.0;
- Pridaná podpora pre timeit;
- socket.socket bol upravený tak, aby umožňoval spúšťať „graalpython -m http.server“ a sťahovať nešifrované (bez TLS) http-zdroje;
- Opravené problémy súvisiace so zobrazením objektov pandas.DataFrame,
nesprávnym spracovaním n-tíc v bytes.startswith,
deštruktúrovácim priradením iterátorov a použitím dict.__contains__ pre slovníky; - Pridaná podpora ast.PyCF_ONLY_AST, ktorá zabezpečiť fungovanie pytest;
- Pridaná PEP 498 (interpolácia reťazcov v literáloch);
- prapor „—python.EmulateJython“ pre import JVM tried pomocou normálnej syntaxe Python import a zachytávanie JVM výnimiek z kódu v Pythone;
- Vylepšený výkon analyzátora, cacheovanie výnimiek,
prístup k objektom Python z JVM kódu. Zlepšené výsledky v testoch výkonu pre Python kód a natívne rozšírenia (vykonávanie natívnych rozšírení nad llvm predpokladá, že llvm bitcode je odovzdaný GraalVM na JIT kompiláciu).
v TruffleRuby:
- Na kompiláciu natívnych rozšírení sa teraz uplatňuje vstavaný nástroj LLVM, ktorý generuje natívny kód aj bitcode. To znamená, že viac natívnych rozšírení by malo byť kompilovaných priamo, čo umožní vyriešiť väčšinu problémov spojených s prekladaním;
- Samostatná inštalácia LLVM pre inštaláciu natívnych rozšírení v TruffleRuby;
- Pre inštaláciu C++ rozšírení na TruffleRuby už nie je potrebná inštalácia libc++ a libc++abi;
- Licencia bola aktualizovaná na EPL 2.0/GPL 2.0/LGPL 2.1, rovnako ako v nedávnom JRuby;
- Pridaná podpora voliteľných argumentov v GC.stat;
- Implementovaná metóda Kernel#load s obalením a Kernel#spawn s :chdir;
- Pridaný rb_str_drop_bytes, zaujímavý tým, že ho používa OpenSSL;
- Zahŕňajú sa rozšírenia predinštalovaných gemov potrebných pre rails new v Rails 6;
- Na kompiláciu natívnych rozšírení sú využité prapory ako v MRI;
- Implementované optimalizácie výkonu a znížená spotreba pamäte.
v FastR:
- Zabezpečená kompatibilita s R 3.6.1;
- Pridaná predbežná podpora pre vykonávanie natívnych rozšírení na základe LLVM. Pri zostavovaní natívnych balíkov R je FastR nakonfigurovaný na použitie vstavaného nástroja LLVM v GraalVM. Výsledné binárne súbory budú obsahovať natívny kód aj LLVM bitcode.
Predinštalované balíky sú tiež zostavené týmto spôsobom.
FastR načítava a spúšťa natívny kód rozšírení predvolene, ale keď je spustený s možnosťou „—R.BackEnd=llvm“, bude používať bitcode. LLVM backend môže byť selektívne použitý pre niektoré R balíky, ak je zadané „—R.BackEndLLVM=pkg1,pkg2“. V prípade problémov s inštaláciou balíkov môžete vrátiť všetko späť zavolaním fastr.setToolchain(„native“) alebo ručne upravením súboru $FASTR_HOME/etc/Makeconf; - V tejto verzii FastR je dodávaný bez knižníc GCC runtime;
- Opravené úniky pamäte;
- Opravené problémy pri práci s veľkými vektormi (>1GB);
- Realizovaný grepRaw, ale len pre fixed=T.
Zdroj: opennet.ru
