Vydání 19.3.0 virtuálního stroje GraalVM a implementace Pythonu, JavaScriptu, Ruby a R na něm založené

Společnost Oracle publikováno vydání univerzálního virtuálního stroje GraalVM 19.3.0, který podporuje spouštění aplikací v JavaScriptu (Node.js), Pythonu, Ruby, R, libovolných jazycích pro JVM (Java, Scala, Clojure, Kotlin) a jazycích, pro které lze generovat bitkód LLVM (C, C++ , Rez). Větev 19.3 je klasifikována jako vydání dlouhodobé podpory (LTS). pozoruhodný Podpěra, podpora JDK 11, včetně možnosti kompilace kódu Java do spustitelných souborů (GraalVM Native Image). Kód projektu distribuovány pod licencí GPLv2. Současně byly vydány nové verze implementací jazyka Python, JavaScript, Ruby a R pomocí GraalVM - GraalPython, GraalJS, LanýžRuby и FastR.

GraalVM poskytuje Kompilátor JIT, který dokáže za běhu spouštět kód z libovolného skriptovacího jazyka v JVM, včetně JavaScriptu, Ruby, Pythonu a R, a také umožňuje spouštět nativní kód v JVM převedený na bitkód LLVM. Nástroje poskytované GraalVM zahrnují jazykově nezávislý debugger, profilovací systém a analyzátor alokace paměti. GraalVM umožňuje vytvářet kombinované aplikace s komponentami v různých jazycích, což vám umožňuje přistupovat k objektům a poli z kódu v jiných jazycích. Pro jazyky založené na JVM existuje příležitost vytváření spustitelných souborů kompilovaných do strojového kódu, které lze spouštět přímo s minimální spotřebou paměti (správa paměti a vláken je implementována připojením frameworku Substrát VM).

Změny v GraalJS:

  • Je zajištěna kompatibilita s Node.js 12.10.0;
  • Nestandardní globální vlastnosti a funkce jsou ve výchozím nastavení zakázány:
    global (nahrazeno globalThis, nastavení js.global-property na návrat), performance (js.performance), print a printErr (js.print);

  • Implementovaný návrh Promise.allSettled a nulový slučovací návrh, které jsou dostupné v režimu ECMAScript 2020 („-js.ecmascript-version=2020“);
  • Aktualizovány závislosti ICU4J na 64.2, ASM na 7.1.

Změny v GraalPythonu:

  • Přidány pahýly gc.{enable,disable,isenabled}, implementovány charmap_build, sys.hexversion a _lzma;
  • Aktualizovaná standardní knihovna Pythonu 3.7.8;
  • Přidána podpora pro NumPy 1.16.4 a Pandas 0.25.0;
  • Přidána podpora timeit;
  • socket.socket byl uveden do stavu, který vám umožňuje spouštět „graalpython -m http.server“ a načítat nešifrované (bez TLS) http zdroje;
  • Opraveny problémy se zobrazováním objektů pandas.DataFrame.
    nesprávné zpracování n-tic v bytech.startswith,
    destrukční přiřazení iterátorů a použití dict.__contains__ pro slovníky;

  • Přidána podpora pro ast.PyCF_ONLY_AST, která povoleno zajistit, aby pytest fungoval;
  • Přidal podpora PEP 498 (interpolace řetězce v literálech);
  • Realizováno příznak „--python.EmulateJython“ pro import tříd JVM pomocí normální syntaxe importu Pythonu a zachycení výjimek JVM z kódu Pythonu;
  • Vylepšený výkon analyzátoru, ukládání do mezipaměti výjimek,
    přístup k objektům Pythonu z kódu JVM. Vylepšené výsledky testů výkonu pro kód python a nativní rozšíření (spouštění nativních rozšíření nad llvm znamená, že bitcode llvm je předán GraalVM pro kompilaci JIT).

Změny v TruffleRuby:

  • Ke kompilaci nativních rozšíření se nyní používá vestavěná sada nástrojů LLVM, která vytváří nativní kód i bitový kód. To znamená, že více nativních rozšíření by se mělo zkompilovat ihned po vybalení, což eliminuje většinu problémů s propojením;
  • Samostatná instalace LLVM pro instalaci nativních rozšíření v TruffleRuby;
  • Instalace rozšíření C++ na TruffleRuby již nevyžaduje instalaci libc++ a libc++abi;
  • Licence aktualizována na EPL 2.0/GPL 2.0/LGPL 2.1, stejně jako nejnovější JRuby;
  • Přidána podpora volitelných argumentů do GC.stat;
  • Implementována metoda Kernel#load s obalem a Kernel#spawn s :chdir;
  • Přidán rb_str_drop_bytes, což je skvělé, protože ho OpenSSL používá;
  • Zahrnuty rozšíření předinstalovaných drahokamů potřebných pro kolejnice nové v Rails 6;
  • Ke kompilaci nativních rozšíření se používají příznaky, jako u MRI;
  • Byla provedena optimalizace výkonu a snížena spotřeba paměti.

Změny ve FastR:

  • Je zajištěna kompatibilita s R 3.6.1;
  • Přidána předběžná podpora pro spouštění nativních rozšíření založených na LLVM. Při sestavování nativních R balíčků je FastR nakonfigurován tak, aby používal vestavěné nástroje LLVM GraalVM. Výsledné binární soubory budou obsahovat jak nativní kód, tak bitový kód LLVM.

    Tímto způsobem jsou také sestaveny předinstalované balíčky.
    FastR standardně načítá a spouští nativní kód rozšíření, ale při spuštění s volbou "--R.BackEnd=llvm" bude použit bitový kód. Backend LLVM lze selektivně použít pro některé balíčky R zadáním "--R.BackEndLLVM=pkg1,pkg2". Pokud máte problémy s instalací balíčků, můžete vše vrátit zpět voláním fastr.setToolchain("native") nebo ruční úpravou souboru $FASTR_HOME/etc/Makeconf;

  • V tomto vydání se FastR dodává bez běhových knihoven GCC;
  • Opraveny úniky paměti;
  • Opraveny problémy při práci s velkými vektory (>1GB);
  • Implementován grepRaw, ale pouze pro fixed=T.

Zdroj: opennet.ru

Přidat komentář