Firma Oracle wydanie uniwersalnej maszyny wirtualnej , wspierającej uruchamianie aplikacji w JavaScript (Node.js), Pythonie, Ruby, R, w dowolnych językach dla JVM (Java, Scala, Clojure, Kotlin) oraz językach, dla których może być generowany kod bitowy LLVM (C, C++, Rust). Gałąź 19.3 została zakwalifikowana do kategorii wydań z długoterminowym wsparciem (LTS) i wsparciem , w tym z możliwością kompilacji kodu Java do plików wykonywalnych (GraalVM Native Image). Kod projektu na licencji GPLv2. Jednocześnie wydano nowe wersje języków korzystających z GraalVM: Python, JavaScript, Ruby i R — , , i .
GraalVM kompilator JIT, który może dynamicznie wykonywać w JVM kod dowolnych języków skryptowych, w tym JavaScript, Ruby, Python i R, a także umożliwia uruchamianie natywnego kodu w JVM, przekształconego w bitcode LLVM. Narzędzie udostępniane przez GraalVM obejmuje niezależny od języka programowania debuggery, system profilowania i analizy pamięci. GraalVM umożliwia tworzenie aplikacji hybrydowych z komponentami w różnych językach, pozwalając na dostęp do obiektów i tablic z kodu w innych językach. Dla języków opartych na JVM dostępne jest tworzenie plików wykonywalnych skompilowanych do kodu maszynowego, które można uruchamiać bezpośrednio z minimalnym zużyciem pamięci (zarządzanie pamięcią i wątkami realizowane jest poprzez podłączenie frameworka ).
:
- Zapewniono kompatybilność z Node.js 12.10.0;
- Domyślnie wyłączono niestandardowe właściwości globalne i funkcje:
global (zastąpione przez globalThis, możliwe jest przywrócenie poprzez ustawienie js.global-property), performance (js.performance), print i printErr (js.print); - Zaimplementowano Promise.allSettled i propozycję nullish coalescing, które są dostępne w trybie ECMAScript 2020 („—js.ecmascript-version=2020”);
- Zaktualizowano zależności ICU4J do 64.2, ASM do 7.1.
w GraalPython:
- Dodano haki gc.{enable,disable,isenabled}, zrealizowano charmap_build, sys.hexversion i _lzma;
- Zaktualizowano standardową bibliotekę Python 3.7.8;
- Dodano wsparcie dla NumPy 1.16.4 i Pandas 0.25.0;
- Dodano wsparcie dla timeit;
- socket.socket doprowadzono do stanu, który umożliwia uruchomienie „graalpython -m http.server” i pobieranie niezaszyfrowanych (bez TLS) zasobów http;
- Naprawiono problemy związane z wyświetlaniem obiektów pandas.DataFrame,
nieprawidłowe przetwarzanie krotek w bytes.startswith,
destrukturyzujące przypisania iteratorów oraz używanie dict.__contains__ dla słowników; - Dodano wsparcie ast.PyCF_ONLY_AST, które zapewnić działanie pytest;
- Dodano PEP 498 (interpolacja ciągów w literałach);
- flaga „—python.EmulateJython” do importowania klas JVM za pomocą standardowej składni importu w Pythonie oraz obsługi wyjątków JVM w kodzie Python;
- Poprawiona wydajność parsera, buforowania wyjątków,
dostępu do obiektów Pythona z kodu JVM. Poprawiono wyniki w testach wydajności dla kodu python i natywnych rozszerzeń (wykonywanie natywnych rozszerzeń na llvm oznacza, że kod bitowy llvm jest przekazywany do GraalVM do kompilacji JIT).
w TruffleRuby:
- Do kompilacji natywnych rozszerzeń zastosowano wbudowane narzędzia LLVM, które tworzą zarówno kod natywny, jak i kod bitowy. Oznacza to, że więcej natywnych rozszerzeń powinno kompilować się bez problemu, co rozwiązuje większość problemów związanych z linkowaniem;
- Osobna instalacja LLVM do instalacji natywnych rozszerzeń w TruffleRuby;
- Do instalacji rozszerzeń C++ w TruffleRuby nie jest już wymagana instalacja libc++ i libc++abi;
- Licencja została zaktualizowana do EPL 2.0/GPL 2.0/LGPL 2.1, podobnie jak w ostatnim JRuby;
- Dodano wsparcie dla opcjonalnych argumentów w GC.stat;
- Zrealizowano metodę Kernel#load z opakowaniem oraz Kernel#spawn z :chdir;
- Dodano rb_str_drop_bytes, co jest istotne, ponieważ używa go OpenSSL;
- Włączono rozszerzenia wstępnie zainstalowanych gemów potrzebnych do rails new w Rails 6;
- Do kompilacji natywnych rozszerzeń zastosowano flagi, jak w MRI;
- Wprowadzone optymalizacje wydajności oraz zmniejszone zużycie pamięci.
w FastR:
- Zapewniona zgodność z R 3.6.1;
- Dodano wstępną obsługę wykonywania natywnych rozszerzeń opartych na LLVM. Podczas budowania natywnych pakietów R FastR skonfigurowano do korzystania z wbudowanych narzędzi LLVM w GraalVM. Wynikowe pliki binarne będą zawierać zarówno kod natywny, jak i kod bitowy LLVM.
Wstępnie zainstalowane pakiety również zbudowano w ten sposób.
FastR ładuje i uruchamia kod natywny rozszerzeń domyślnie, ale gdy jest uruchamiany z opcją „—R.BackEnd=llvm”, będzie używany kod bitowy. Backend LLVM można stosować selektywnie dla niektórych pakietów R, podając „—R.BackEndLLVM=pkg1,pkg2”. W przypadku problemów z instalacją pakietów można wrócić do poprzednich ustawień, wywołując fastr.setToolchain(„native”) lub ręcznie edytując plik $FASTR_HOME/etc/Makeconf; - W tej wersji FastR dostarczany jest bez bibliotek GCC runtime;
- Naprawiono wycieki pamięci;
- Naprawiono problemy związane z dużymi wektorami (>1GB);
- Zrealizowano grepRaw, ale tylko dla fixed=T.
Źródło: opennet.ru
