Vydání 19.3.0 virtuálního stroje GraalVM a implementací Pythonu, JavaScriptu, Ruby a R na jeho základě

Společnost Oracle publikovala vydání univerzální virtuální stroje GraalVM 19.3.0, 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 významná podporou JDK 11, včetně možnosti kompilace Java kódu do spustitelných souborů (GraalVM Native Image). Kód projektu distribuováno pod licencí GPLv2. Současně byly vydány nové verze jazykových implementací využívajících GraalVM jako Python, JavaScript, Ruby a R — GraalPython, GraalJS, TruffleRuby a FastR.

GraalVM poskytuje 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 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 Substrate VM).

Změny v GraalJS:

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

Změny 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á umožnila zajištění funkčnosti pytest;
  • Byla přidána podpora PEP 498 (interpolace řetězců v literálech);
  • Realizováno 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).

Změny 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.

Změny 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

Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster