Oracle Veröffentlichung einer universellen virtuellen Maschine , die die Ausführung von Anwendungen in JavaScript (Node.js), Python, Ruby, R, allen JVM-Sprachen (Java, Scala, Clojure, Kotlin) und Sprachen, die LLVM-Bitcode generieren können (C, C++, Rust), unterstützt. Der 19.3-Zweig gehört zur Kategorie der Veröffentlichungen mit langfristigem Support (LTS) und die Unterstützung von , einschließlich der Möglichkeit, Java-Code in ausführbare Dateien zu kompilieren (GraalVM Native Image). Der Projektcode steht unter der GPLv2-Lizenz. Gleichzeitig wurden neue Versionen der GraalVM-Implementierungen für die Sprachen Python, JavaScript, Ruby und R veröffentlicht — , , und .
GraalVM Der JIT-Compiler, der zur Laufzeit Code beliebiger Skriptsprachen in der JVM ausführen kann, einschließlich JavaScript, Ruby, Python und R, ermöglicht auch die Ausführung von nativem Code in der JVM, der in LLVM-Bitcode umgewandelt wurde. Die von GraalVM bereitgestellten Tools umfassen sprachunabhängige Debugger, Profilsysteme und Speicherverteilungsanalysatoren. GraalVM ermöglicht die Erstellung von kombinierten Anwendungen mit Komponenten in verschiedenen Sprachen, wobei der Zugriff auf Objekte und Arrays aus dem Code anderer Sprachen möglich ist. Für JVM-basierte Sprachen gibt es Ausführungsdateien, die in Maschinencode kompiliert sind und direkt mit minimalem Speicherverbrauch ausgeführt werden können (Speicher- und Threadmanagement erfolgt durch die Anbindung des Frameworks ).
:
- Kompatibilität mit Node.js 12.10.0 gewährleistet;
- Standardmäßig sind nicht standardmäßige globale Eigenschaften und Funktionen deaktiviert:
global (ersetzt durch globalThis, eine Rückgabe ist über die Einstellung js.global-property vorgesehen), performance (js.performance), print und printErr (js.print); - Promise.allSettled und nullish coalescing proposal wurden implementiert, die im ECMAScript 2020-Modus verfügbar sind (»—js.ecmascript-version=2020«);
- ICU4J-Abhängigkeiten auf 64.2 und ASM auf 7.1 aktualisiert.
in GraalPython:
- Platzhalter gc.{enable,disable,isenabled} hinzugefügt, charmap_build, sys.hexversion und _lzma implementiert.
- Die Standardbibliothek von Python 3.7.8 wurde aktualisiert.
- Unterstützung für NumPy 1.16.4 und Pandas 0.25.0 hinzugefügt.
- Unterstützung für timeit hinzugefügt.
- socket.socket wurde so angepasst, dass „graalpython -m http.server“ ausgeführt werden kann, um unverschlüsselte (ohne TLS) http-Ressourcen zu laden.
- Probleme mit der Ausgabe von pandas.DataFrame-Objekten wurden behoben.
Fehlerhafte Verarbeitung von Tupeln in bytes.startswith korrigiert.
Destrukturierung bei der Zuordnung von Iteratoren und Verwendung von dict.__contains__ für Wörterbücher wurden behoben. - Unterstützung für ast.PyCF_ONLY_AST hinzugefügt, was pytest zu verwenden.
- Hinzugefügt PEP 498 (String-Interpolation in Literalen) hinzugefügt.
- Die Leistung des Parsers, des Cache-Managements von Ausnahmen und des Zugriffs auf Python-Objekte aus JVM-Code wurde verbessert. Die Ergebnisse in Leistungstests für Python-Code und native Erweiterungen wurden verbessert (die Ausführung nativer Erweiterungen über llvm bedeutet, dass der llvm-Bitcode an GraalVM zur JIT-Kompilierung übergeben wird).
- Die Leistung des Parsers, der Ausnahme-Caching-Mechanismen und
der Zugriff auf Python-Objekte aus JVM-Code wurden verbessert. Die Leistungstests für Python-Code und native Erweiterungen zeigen Verbesserungen (die Ausführung nativer Erweiterungen über llvm impliziert, dass der llvm-Bitcode an GraalVM zur JIT-Kompilierung übergeben wird).
in TruffleRuby:
- Für die Kompilierung nativer Erweiterungen wird nun das integrierte LLVM-Toolkit verwendet, das sowohl nativen Code als auch Bitcode erstellt. Das bedeutet, dass mehr native Erweiterungen ohne zusätzliche Anpassungen kompiliert werden sollten, was die meisten Kompilierungsprobleme löst;
- Eine separate Installation von LLVM für die Installation nativer Erweiterungen in TruffleRuby;
- Für die Installation von C++-Erweiterungen in TruffleRuby ist jetzt keine Installation von libc++ und libc++abi erforderlich;
- Die Lizenz wurde auf EPL 2.0/GPL 2.0/LGPL 2.1 aktualisiert, wie kürzlich bei JRuby;
- Unterstützung für optionale Argumente in GC.stat hinzugefügt;
- Die Methode Kernel#load mit Wrapper und Kernel#spawn mit :chdir wurde umgesetzt;
- rb_str_drop_bytes wurde hinzugefügt, das bemerkenswert ist, da es von OpenSSL verwendet wird;
- Die Erfordernisse für vorinstallierte Gem-Erweiterungen, die für rails new in Rails 6 benötigt werden, sind enthalten;
- Für die Kompilierung nativer Erweiterungen werden Flaggen eingesetzt, wie es auch in MRI der Fall ist;
- Leistungsoptimierungen wurden eingeführt und der Speicherverbrauch reduziert.
in FastR:
- Kompatibilität mit R 3.6.1 sichergestellt;
- Eine vorläufige Unterstützung für die Ausführung nativer Erweiterungen basierend auf LLVM wurde hinzugefügt. Beim Erstellen nativer Pakete ist FastR so konfiguriert, dass das in GraalVM integrierte LLVM-Toolkit verwendet wird. Die resultierenden Binärdateien enthalten sowohl nativen Code als auch LLVM-Bitcode.
Vorgesehene Pakete wurden ebenfalls auf diese Weise erstellt.
FastR lädt und führt standardmäßig den nativen Code von Erweiterungen aus, nutzt jedoch den Bitcode, wenn es mit der Option „—R.BackEnd=llvm“ gestartet wird. Der LLVM-Backend kann selektiv für bestimmte R-Pakete verwendet werden, indem „—R.BackEndLLVM=pkg1,pkg2“ angegeben wird. Sollte es bei der Installation von Paketen zu Problemen kommen, 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-Laufzeitbibliotheken geliefert;
- Speicherlecks wurden behoben;
- Probleme mit großen Vektoren (>1GB) wurden behoben;
- grepRaw wurde implementiert, jedoch nur für fixed=T.
Quelle: opennet.ru
