Die Veröffentlichung der Version 19.3.0 der GraalVM-virtuellen Maschine und der Implementierungen von Python, JavaScript, Ruby und R auf ihrer Basis

Das Unternehmen Oracle veröffentlicht Veröffentlichung der universellen virtuellen Maschine GraalVM 19.3.0, die die Ausführung von Anwendungen in JavaScript (Node.js), Python, Ruby, R, in allen Sprachen für die JVM (Java, Scala, Clojure, Kotlin) und in Sprachen, für die Bytecode von LLVM generiert werden kann (C, C++, Rust), unterstützt. Die Version 19.3 gehört zur Kategorie der Releases mit langfristiger Unterstützung (LTS) und ist bemerkenswert im Zugänglichkeitsbaum des Browsers). JDK 11, einschließlich der Möglichkeit, Java-Code in ausführbare Dateien zu kompilieren (GraalVM Native Image). Der Projektcode wird verbreitet steht unter der Lizenz GPLv2. Gleichzeitig wurden neue Versionen der GraalVM-Implementierungen der Sprachen Python, JavaScript, Ruby und R veröffentlicht — GraalPython, GraalJS, TruffleRuby und FastR.

GraalVM ein Framework zur Erstellung von Komponenten, die Programme sind, die in ihrer eigenen Sandbox ausgeführt werden und über IPC mit anderen Komponenten interagieren können. Ein JIT-Compiler, der zur Laufzeit Code beliebiger Skriptsprachen in der JVM ausführen kann, einschließlich JavaScript, Ruby, Python und R, und die Möglichkeit bietet, nativen Code in der JVM auszuführen, der in LLVM-Bytecode umgewandelt wurde. Das von GraalVM bereitgestellte Werkzeug umfasst einen sprachunabhängigen Debugger, ein Profilsystem und einen Speichermanalysator. GraalVM ermöglicht die Erstellung kombinierter Anwendungen mit Komponenten in verschiedenen Sprachen, sodass auf Objekte und Arrays von Code in anderen Sprachen zugegriffen werden kann. Für JVM-basierte Sprachen gibt es die Möglichkeit die Erstellung von in Maschinencode kompilierten ausführbaren Dateien, die direkt mit minimalem Speicherverbrauch ausgeführt werden können (Speicher- und Threadverwaltung erfolgt über die Anbindung an das Framework Substrate VM).

Änderungen in GraalJS:

  • Die Kompatibilität mit Node.js 12.10.0 wurde sichergestellt;
  • Nicht standardmäßige globale Eigenschaften und Funktionen sind standardmäßig deaktiviert:
    global (wurde durch globalThis ersetzt, eine Rückgabe ist über die Einstellung js.global-property vorgesehen), performance (js.performance), print und printErr (js.print);
  • Promise.allSettled und der Nullish Coalescing Proposal wurden implementiert, die im ECMAScript 2020-Modus verfügbar sind („—js.ecmascript-version=2020“);
  • Die Abhängigkeiten ICU4J wurden auf 64.2, ASM auf 7.1 aktualisiert.

Änderungen in GraalPython:

  • Stub-Funktionen gc.{enable,disable,isenabled} wurden hinzugefügt, charmap_build, sys.hexversion und _lzma wurden implementiert;
  • Die Standardbibliothek Python 3.7.8 wurde aktualisiert;
  • Unterstützung für NumPy 1.16.4 und Pandas 0.25.0 wurde hinzugefügt;
  • Unterstützung für timeit wurde hinzugefügt;
  • socket.socket wurde in einen Zustand versetzt, der das Ausführen von „graalpython -m http.server“ und das Laden unverschlüsselter (ohne TLS) HTTP-Ressourcen ermöglicht;
  • Probleme im Zusammenhang mit der Ausgabe von pandas.DataFrame-Objekten wurden behoben,
    falsche Behandlung von Tupeln in bytes.startswith,
    destrukturiertem Zuweisen von Iteratoren und der Verwendung von dict.__contains__ für Dictionaries;
  • Die Unterstützung für ast.PyCF_ONLY_AST wurde hinzugefügt, die erlaubt den Betrieb von pytest sicherzustellen;
  • Hinzugefügt unterstützt PEP 498 (String-Interpolation in Literalen);
  • Implementiert Flag «—python.EmulateJython» zum Importieren von JVM-Klassen mit normaler Python-Syntax import und zum Behandeln von JVM-Ausnahmen aus dem Python-Code;
  • Die Leistung des Parsers, der Ausnahme-Caching,
    des Zugriffs auf Python-Objekte aus JVM-Code wurde verbessert. Die Ergebnisse in den Leistungstests für Python-Code und native Erweiterungen wurden optimiert (die Ausführung nativer Erweiterungen über LLVM bedeutet, dass LLVM-Bitcode an GraalVM zur JIT-Kompilierung übergeben wird).

Änderungen in TruffleRuby:

  • Für die Kompilierung nativer Erweiterungen wird jetzt das integrierte LLVM-Tooling verwendet, das sowohl nativen Code als auch Bitcode erstellt. Das bedeutet, dass mehr native Erweiterungen jetzt sofort kompiliert werden sollten, was die meisten Probleme im Zusammenhang mit dem Linken löst;
  • Ein separates LLVM-Setup für die Installation nativer Erweiterungen in TruffleRuby;
  • Es ist jetzt keine Installation von libc++ und libc++abi erforderlich, um C++-Erweiterungen in TruffleRuby zu installieren;
  • Die Lizenz wurde auf EPL 2.0/GPL 2.0/LGPL 2.1 aktualisiert, wie es auch bei dem aktuellen JRuby der Fall ist;
  • Unterstützung für optionale Argumente in GC.stat hinzugefügt;
  • Die Methode Kernel#load mit einem Wrapper und Kernel#spawn mit :chdir wurde implementiert;
  • rb_str_drop_bytes hinzugefügt, bemerkenswert dadurch, dass es von OpenSSL verwendet wird;
  • Eingestellte Erweiterungen der vorinstallierten Gems, die für rails new in Rails 6 benötigt werden;
  • Für die Kompilierung nativer Erweiterungen wurden Flags wie in MRI verwendet;
  • Leistungsoptimierungen wurden vorgenommen und der Speicherverbrauch wurde reduziert.

Änderungen in FastR:

  • Kompatibilität mit R 3.6.1 sichergestellt;
  • Vorläufige Unterstützung für die Ausführung nativer Erweiterungen basierend auf LLVM hinzugefügt. Beim Erstellen nativer R-Pakete ist FastR so konfiguriert, dass das integrierte LLVM-Tooling von GraalVM verwendet wird. Die resultierenden Binärdateien enthalten sowohl nativen Code als auch LLVM-Bitcode.

    Vorinstallierte Pakete wurden auch auf diese Weise gebaut.
    FastR lädt und führt nativen Code von Erweiterungen standardmäßig aus, aber wenn es mit der Option «—R.BackEnd=llvm» gestartet wird, wird Bitcode verwendet. Der LLVM-Backend kann selektiv für einige R-Pakete verwendet werden, indem «—R.BackEndLLVM=pkg1,pkg2» angegeben wird. Im Falle von Problemen beim Installieren von Paketen kann alles zurückgesetzt werden, indem fastr.setToolchain(«native») aufgerufen oder die Datei $FASTR_HOME/etc/Makeconf manuell bearbeitet wird;

  • In dieser Version wird FastR ohne GCC Runtime-Bibliotheken geliefert;
  • Speicherlecks wurden behoben;
  • Probleme beim Umgang mit großen Vektoren (>1GB) wurden behoben.
  • grepRaw wurde implementiert, jedoch nur für fixed=T.

Quelle: opennet.ru

60GB SSD 8Gb DDR4