Wydanie 19.3.0 maszyny wirtualnej GraalVM i oparte na niej implementacje Pythona, JavaScript, Ruby i R

Firma Oral опубликовала wydanie uniwersalnej maszyny wirtualnej GraalVM 19.3.0, który obsługuje uruchamianie aplikacji w JavaScript (Node.js), Python, Ruby, R, dowolnych językach dla JVM (Java, Scala, Clojure, Kotlin) oraz językach, dla których można wygenerować kod bitowy LLVM (C, C++ , rdza). Gałąź 19.3 jest klasyfikowana jako wersja z długoterminowym wsparciem (LTS) i niezwykły wsparcie JDK 11, w tym możliwość kompilacji kodu Java do plików wykonywalnych (GraalVM Native Image). Kod projektu dystrybuowane przez licencjonowany na licencji GPLv2. W tym samym czasie ukazały się nowe wersje implementacji języków Python, JavaScript, Ruby i R wykorzystujących GraalVM - GraalPython, GraalJS, TruflaRuby и SzybkiR.

GraalVM zapewnia Kompilator JIT, który może na bieżąco wykonywać kod z dowolnego języka skryptowego w maszynie JVM, w tym JavaScript, Ruby, Python i R, a także umożliwia uruchamianie kodu natywnego w maszynie JVM skonwertowanej na kod bitowy LLVM. Narzędzia dostarczane przez GraalVM obejmują niezależny od języka debugger, system profilowania i analizator alokacji pamięci. GraalVM umożliwia tworzenie połączonych aplikacji z komponentami w różnych językach, umożliwiając dostęp do obiektów i tablic z kodu w innych językach. W przypadku języków opartych na JVM istnieje okazja tworzenie plików wykonywalnych wkompilowanych w kod maszynowy, które można wykonać bezpośrednio przy minimalnym zużyciu pamięci (zarządzanie pamięcią i wątkami realizowane jest poprzez połączenie frameworku Podłoże VM).

Zmiany w GraalJS:

  • Zapewniona jest kompatybilność z Node.js 12.10.0;
  • Niestandardowe właściwości i funkcje globalne są domyślnie wyłączone:
    global (zastąpiony przez globalThis, ustawienie właściwości js.global na powrót), wydajność (js. Performance), print i printErr (js.print);

  • Zaimplementowano propozycję łączenia Promise.allSettled i nullish, 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 GraalPythonie:

  • Dodano kody pośredniczące gc.{enable,disable,isenabled}, zaimplementowano Charmap_build, sys.hexversion i _lzma;
  • Zaktualizowana biblioteka standardowa Pythona 3.7.8;
  • Dodano obsługę NumPy 1.16.4 i Pand 0.25.0;
  • Dodano obsługę timeit;
  • gniazdo.socket zostało doprowadzone do stanu umożliwiającego uruchomienie „graalpython -m http.server” i załadowanie niezaszyfrowanych (bez TLS) zasobów http;
  • Naprawiono problemy z wyświetlaniem obiektów pandas.DataFrame.
    nieprawidłowe przetwarzanie krotek w bajtach.startswith,
    destrukturyzujące przypisanie iteratorów i użycie dict.__contains__ dla słowników;

  • Dodano obsługę ast.PyCF_ONLY_AST, która dozwolony upewnij się, że pytest działa;
  • Dodany wsparcie PEP 498 (interpolacja ciągów w literałach);
  • Wdrożone flaga „--python.EmulateJython” do importowania klas JVM przy użyciu normalnej składni importu Pythona i przechwytywania wyjątków JVM z kodu Pythona;
  • Poprawiona wydajność parsera, buforowanie wyjątków,
    uzyskiwanie dostępu do obiektów Pythona z kodu JVM. Lepsze wyniki w testach wydajności dla kodu Pythona i rozszerzeń natywnych (wykonanie rozszerzeń natywnych na llvm oznacza, że ​​kod bitowy llvm jest przekazywany do GraalVM w celu kompilacji JIT).

Zmiany w TrufleRuby:

  • Do kompilowania rozszerzeń natywnych używany jest teraz wbudowany zestaw narzędzi LLVM, który tworzy zarówno kod natywny, jak i kod bitowy. Oznacza to, że więcej rozszerzeń natywnych powinno się skompilować od razu po wyjęciu z pudełka, eliminując większość problemów z linkowaniem;
  • Oddzielna instalacja LLVM do instalowania rozszerzeń natywnych w TruffleRuby;
  • Instalowanie rozszerzeń C++ na TruffleRuby nie wymaga już instalowania bibliotek libc++ i libc++abi;
  • Licencja zaktualizowana do EPL 2.0/GPL 2.0/LGPL 2.1, taka sama jak najnowszy JRuby;
  • Dodano obsługę opcjonalnych argumentów do GC.stat;
  • Zaimplementowano metodę Kernel#load z opakowaniem i Kernel#spawn z :chdir;
  • Dodano rb_str_drop_bytes, co jest świetne, ponieważ OpenSSL go używa;
  • Zawiera rozszerzenia wstępnie zainstalowanych klejnotów potrzebnych dla Railsów nowych w Rails 6;
  • Do kompilowania rozszerzeń natywnych używane są flagi, jak w MRI;
  • Dokonano optymalizacji wydajności i zmniejszono zużycie pamięci.

Zmiany w FastR:

  • Zapewniona jest kompatybilność z R 3.6.1;
  • Dodano wstępną obsługę uruchamiania rozszerzeń natywnych w oparciu o LLVM. Podczas budowania natywnych pakietów R, FastR jest skonfigurowany do korzystania z wbudowanych narzędzi LLVM GraalVM. Wynikowe pliki binarne będą zawierać zarówno kod natywny, jak i kod bitowy LLVM.

    W ten sposób budowane są również preinstalowane pakiety.
    FastR domyślnie ładuje i uruchamia natywny kod rozszerzenia, ale po uruchomieniu z opcją „--R.BackEnd=llvm” zostanie użyty kod bitowy. Zaplecza LLVM można używać selektywnie dla niektórych pakietów R, określając „--R.BackEndLLVM=pkg1,pkg2”. Jeśli masz problemy z instalacją pakietów, możesz przywrócić wszystko, wywołując fastr.setToolchain("native") lub ręcznie edytując plik $FASTR_HOME/etc/Makeconf;

  • W tej wersji FastR jest dostarczany bez bibliotek wykonawczych GCC;
  • Naprawiono wycieki pamięci;
  • Naprawiono problemy podczas pracy z dużymi wektorami (> 1 GB);
  • Zaimplementowano grepRaw, ale tylko dla fix=T.

Źródło: opennet.ru

Dodaj komentarz