Wydanie 19.3.0 wirtualnej maszyny GraalVM oraz implementacje Python, JavaScript, Ruby i R oparte na tej technologii

Firma Oracle opublikowała wydanie uniwersalnej maszyny wirtualnej GraalVM 19.3.0, 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 jest niezwykła wsparciem JDK 11, w tym z możliwością kompilacji kodu Java do plików wykonywalnych (GraalVM Native Image). Kod projektu rozpowszechniany na licencji GPLv2. Jednocześnie wydano nowe wersje języków korzystających z GraalVM: Python, JavaScript, Ruby i R — GraalPython, GraalJS, TruffleRuby i FastR.

GraalVM oferuje 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 możliwość 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 Substrate VM).

Zmiany w GraalJS:

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

Zmiany 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 umożliwiło zapewnić działanie pytest;
  • Dodano wsparcie PEP 498 (interpolacja ciągów w literałach);
  • Zrealizowano 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).

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

Zmiany 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

Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS 🔥 Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS | ProHoster