Společnost Oracle vydání univerzální virtuální stroje , podporující spuštění aplikací v JavaScriptu (Node.js), Pythonu, Rubinu, R, jakýchkoli jazycích pro JVM (Java, Scala, Clojure, Kotlin) a v jazycích, pro které může být vytvořen bitcode LLVM (C, C++, Rust). Větev 19.3 byla zařazena mezi dlouhodobě podporované verze (LTS) a podporou , včetně možnosti kompilace Java kódu do spustitelných souborů (GraalVM Native Image). Kód projektu pod licencí GPLv2. Současně byly vydány nové verze jazykových implementací využívajících GraalVM jako Python, JavaScript, Ruby a R — , , a .
GraalVM JIT kompilátor, který může na vyžádání spouštět v JVM kód jakýchkoli skriptovacích jazyků včetně JavaScriptu, Rubinu, Pythonu a R, a také umožňuje spouštět nativní kód v JVM, převedený na bitcode LLVM. Poskytovaný nástrojový balíček GraalVM zahrnuje nezávislé na programovacím jazyce ladicí nástroj, systém profilování a analyzátor rozdělení paměti. GraalVM umožňuje vytvářet kombinované aplikace s komponentami v různých jazycích, což umožňuje přístup k objektům a polem z kódu v jiných jazycích. Pro jazyky na bázi JVM existuje možnost vytváření spustitelných souborů zkompilovaných do strojového kódu, které lze vykonávat přímo s minimální spotřebou paměti (správa paměti a vláken je realizována prostřednictvím připojení rámce ).
:
- Zajištěna kompatibilita s Node.js 12.10.0;
- Standardní globální vlastnosti a funkce jsou ve výchozím nastavení vypnuty:
global (nahrazeno globalThis, pro navrácení je k dispozici nastavení js.global-property), performance (js.performance), print a printErr (js.print); - Implementovány Promise.allSettled a nullish coalescing proposal, které jsou k dispozici v režimu ECMAScript 2020 („—js.ecmascript-version=2020“);
- Aktualizovány závislosti ICU4J na 64.2, ASM na 7.1.
v GraalPython:
- Přidány zástupné znaky gc.{enable,disable,isenabled}, implementovány charmap_build, sys.hexversion a _lzma;
- Aktualizována standardní knihovna Pythonu na 3.7.8;
- Přidána podpora pro NumPy 1.16.4 a Pandas 0.25.0;
- Přidána podpora pro timeit;
- socket.socket bylo vylepšeno pro spuštění „graalpython -m http.server“ a načítání nešifrovaných (bez TLS) http-zdrojů;
- Opraveny problémy spojené s výstupem objektů pandas.DataFrame,
nesprávné zpracování n-tic v bytes.startswith,
destruktivní přiřazování iterátorům a používání dict.__contains__ pro slovníky; - Přidána podpora ast.PyCF_ONLY_AST, která zajištění funkčnosti pytest;
- Byla přidána PEP 498 (interpolace řetězců v literálech);
- přepínač „—python.EmulateJython“ pro import JVM tříd pomocí standardní syntaxe import Pythonu a zachytávání JVM výjimek ve kódu Python;
- Vylepšena výkonnost parseru, cache výjimek,
přístupu k objektům Pythonu z kódu JVM. Zlepšení výsledků v testech výkonnosti pro kód python a nativní rozšíření (provádění nativních rozšíření nad llvm znamená, že bitcode llvm se předává GraalVM pro JIT kompilaci).
v TruffleRuby:
- Pro kompilaci nativních rozšíření se nyní používá integrovaný nástroj LLVM, který vytváří nativní kód i bitcode. To znamená, že více nativních rozšíření by mělo kompilovat bez supliku, což umožňuje vyřešit většinu problémů při linkování;
- Samostatná instalace LLVM pro instalaci nativních rozšíření v TruffleRuby;
- Pro instalaci C++ rozšíření na TruffleRuby již není třeba instalace libc++ a libc++abi;
- Licence byla aktualizována na EPL 2.0/GPL 2.0/LGPL 2.1, stejně jako v nedávném JRuby;
- Byla přidána podpora volitelných argumentů v GC.stat;
- Implementována metoda Kernel#load s obalem a Kernel#spawn s :chdir;
- Přidán rb_str_drop_bytes, výjimečný tím, že ho využívá OpenSSL;
- Byla zahrnuta rozšíření předinstalovaných gemů potřebných pro rails new v Rails 6;
- Pro kompilaci nativních rozšíření byly použity přepínače, stejně jako v MRI;
- Byly provedeny optimalizace výkonu a snížena spotřeba paměti.
v FastR:
- Zajištěna kompatibilita s R 3.6.1;
- Přidána předběžná podpora pro provádění nativních rozšíření založených na LLVM. Při sestavování nativních balíčků je FastR nakonfigurován pro použití integrovaného nástroje LLVM v GraalVM. Výsledné binární soubory budou obsahovat jak nativní kód, tak LLVM bitcode.
Předinstalované balíčky jsou také sestaveny tímto způsobem.
FastR standardně načítá a spouští nativní kód rozšíření, ale když je spuštěn s volbou „—R.BackEnd=llvm“, bude používán bitcode. LLVM backend může být volitelně použit pro některé balíčky R, a to zadáním „—R.BackEndLLVM=pkg1,pkg2“. V případě problémů při instalaci balíčků je možné vše vrátit zpět pomocí volání fastr.setToolchain(„native“) nebo ruční úpravou souboru $FASTR_HOME/etc/Makeconf; - Tato verze FastR se dodává bez knihoven GCC runtime;
- Opraveny úniky paměti;
- Opraveny problémy s velkými vektory (>1GB);
- Byl zaveden grepRaw, ale pouze pro fixed=T.
Zdroj: opennet.ru
