Release 19.3.0 der virtuellen Maschine GraalVM und darauf basierende Implementierungen von Python, JavaScript, Ruby und R

Oracle-Unternehmen опубликовала Veröffentlichung einer universellen virtuellen Maschine GraalVM 19.3.0, das die Ausführung von Anwendungen in JavaScript (Node.js), Python, Ruby, R, allen Sprachen für die JVM (Java, Scala, Clojure, Kotlin) und Sprachen unterstützt, für die LLVM-Bitcode generiert werden kann (C, C++). , Rost). Der 19.3-Zweig ist als Long Term Support (LTS)-Release klassifiziert und bemerkenswert Unterstützung JDK 11, einschließlich der Möglichkeit, Java-Code in ausführbare Dateien zu kompilieren (GraalVM Native Image). Projektnummer vertrieben von lizenziert unter GPLv2. Gleichzeitig wurden neue Versionen von Python-, JavaScript-, Ruby- und R-Sprachimplementierungen mit GraalVM veröffentlicht - GraalPython, GraalJS, TrüffelRubin и FastR.

GraalVM bietet Ein JIT-Compiler, der Code aus jeder Skriptsprache im Handumdrehen in der JVM ausführen kann, einschließlich JavaScript, Ruby, Python und R, und es außerdem ermöglicht, nativen Code in der JVM auszuführen, der in LLVM-Bitcode konvertiert wird. Zu den von GraalVM bereitgestellten Tools gehören ein sprachunabhängiger Debugger, ein Profiling-System und ein Speicherzuordnungsanalysator. GraalVM ermöglicht die Erstellung kombinierter Anwendungen mit Komponenten in verschiedenen Sprachen und ermöglicht so den Zugriff auf Objekte und Arrays aus Code in anderen Sprachen. Für JVM-basierte Sprachen gibt es Gelegenheit Erstellen ausführbarer Dateien, die in Maschinencode kompiliert werden, der mit minimalem Speicherverbrauch direkt ausgeführt werden kann (Speicher- und Thread-Management wird durch die Verbindung des Frameworks implementiert). Substrat-VM).

Änderungen in GraalJS:

  • Die Kompatibilität mit Node.js 12.10.0 ist gewährleistet;
  • Nicht standardmäßige globale Eigenschaften und Funktionen sind standardmäßig deaktiviert:
    global (ersetzt durch globalThis, Einstellung von js.global-property auf Rückgabe), Performance (js.performance), print und printErr (js.print);

  • Implementierung des Promise.allSettled- und nullish-Koaleszenzvorschlags, die im ECMAScript 2020-Modus verfügbar sind („-js.ecmascript-version=2020“);
  • Aktualisierte Abhängigkeiten ICU4J auf 64.2, ASM auf 7.1.

Änderungen in GraalPython:

  • Stubs gc.{enable,disable,isenabled} hinzugefügt, charmap_build, sys.hexversion und _lzma implementiert;
  • Aktualisierte Python 3.7.8-Standardbibliothek;
  • Unterstützung für NumPy 1.16.4 und Pandas 0.25.0 hinzugefügt;
  • Timeit-Unterstützung hinzugefügt;
  • socket.socket wurde in einen Zustand gebracht, der es Ihnen ermöglicht, „graalpython -m http.server“ auszuführen und unverschlüsselte (ohne TLS) http-Ressourcen zu laden;
  • Probleme bei der Anzeige von pandas.DataFrame-Objekten behoben.
    falsche Verarbeitung von Tupeln in bytes.startswith,
    Destrukturierende Zuweisung von Iteratoren und Verwendung von dict.__contains__ für Wörterbücher;

  • Unterstützung für ast.PyCF_ONLY_AST hinzugefügt, was erlaubt Stellen Sie sicher, dass Pytest funktioniert.
  • Hinzugefügt von unterstützen PEP 498 (String-Interpolation in Literalen);
  • Umgesetzt das Flag „--python.EmulateJython“, um JVM-Klassen mit der normalen Python-Importsyntax zu importieren und JVM-Ausnahmen aus Python-Code abzufangen;
  • Verbesserte Parser-Leistung, Ausnahme-Caching,
    Zugriff auf Python-Objekte über JVM-Code. Verbesserte Ergebnisse bei Leistungstests für Python-Code und native Erweiterungen (die Ausführung nativer Erweiterungen zusätzlich zu llvm impliziert, dass Bitcode llvm zur JIT-Kompilierung an GraalVM übergeben wird).

Änderungen in TruffleRuby:

  • Zum Kompilieren nativer Erweiterungen wird jetzt das integrierte LLVM-Toolkit verwendet, das sowohl nativen Code als auch Bitcode erstellt. Das bedeutet, dass mehr native Erweiterungen sofort kompiliert werden sollten, wodurch die meisten Verknüpfungsprobleme beseitigt werden;
  • Separate LLVM-Installation zur Installation nativer Erweiterungen in TruffleRuby;
  • Die Installation von C++-Erweiterungen auf TruffleRuby erfordert nicht mehr die Installation von libc++ und libc++abi;
  • Lizenz auf EPL 2.0/GPL 2.0/LGPL 2.1 aktualisiert, genau wie das aktuelle JRuby;
  • Unterstützung für optionale Argumente zu GC.stat hinzugefügt;
  • Implementierte die Kernel#load-Methode mit einem Wrapper und Kernel#spawn mit :chdir;
  • rb_str_drop_bytes hinzugefügt, was großartig ist, weil OpenSSL es verwendet;
  • Enthaltene Erweiterungen vorinstallierter Gems, die für Rails neu in Rails 6 benötigt werden;
  • Um native Erweiterungen zu kompilieren, werden Flags verwendet, wie bei MRI;
  • Es wurden Leistungsoptimierungen vorgenommen und der Speicherverbrauch reduziert.

Änderungen in FastR:

  • Die Kompatibilität mit R 3.6.1 ist gewährleistet;
  • Vorläufige Unterstützung für die Ausführung nativer Erweiterungen basierend auf LLVM hinzugefügt. Beim Erstellen nativer R-Pakete ist FastR für die Verwendung der integrierten LLVM-Tools von GraalVM konfiguriert. Die resultierenden Binärdateien enthalten sowohl nativen Code als auch LLVM-Bitcode.

    Auch vorinstallierte Pakete werden auf diese Weise erstellt.
    FastR lädt standardmäßig nativen Erweiterungscode und führt ihn aus, aber wenn es mit der Option „--R.BackEnd=llvm“ gestartet wird, wird Bitcode verwendet. Das LLVM-Backend kann für einige R-Pakete selektiv verwendet werden, indem „--R.BackEndLLVM=pkg1,pkg2“ angegeben wird. Wenn Sie Probleme bei der Installation von Paketen haben, können Sie alles zurücksetzen, indem Sie fastr.setToolchain("native") aufrufen oder die Datei $FASTR_HOME/etc/Makeconf manuell bearbeiten;

  • In dieser Version wird FastR ohne die GCC-Laufzeitbibliotheken ausgeliefert;
  • Speicherlecks behoben;
  • Probleme beim Arbeiten mit großen Vektoren (>1 GB) behoben;
  • grepRaw implementiert, aber nur für „fixed=T“.

Source: opennet.ru

Kommentar hinzufügen