GraalVM 仮想マシンのリリース 19.3.0 と、それに基づく Python、JavaScript、Ruby、および R の実装

オラクル社 опубликовала ユニバーサル仮想マシンのリリース グラアルVM 19.3.0、JavaScript (Node.js)、Python、Ruby、R、JVM 用の任意の言語 (Java、Scala、Clojure、Kotlin)、および LLVM ビットコードを生成できる言語 (C、C++) でのアプリケーションの実行をサポートします。 、 さび)。 19.3 ブランチは長期サポート (LTS) リリースとして分類されており、 顕著 サポート JDK11これには、Java コードを実行可能ファイル (GraalVM ネイティブ イメージ) にコンパイルする機能が含まれます。 プロジェクトコード によって配布 GPLv2 に基づいてライセンスされています。 同時に、GraalVM を使用した Python、JavaScript、Ruby、および R 言語実装の新しいバージョンがリリースされました。 グラールパイソン, GraalJS, トリュフルビー и ファストR.

GraalVM 提供しています JavaScript、Ruby、Python、R などの任意のスクリプト言語のコードを JVM でオンザフライで実行できる JIT コンパイラー。また、LLVM ビットコードに変換されたネイティブ コードを JVM で実行することも可能です。 GraalVM が提供するツールには、言語に依存しないデバッガー、プロファイリング システム、メモリ割り当てアナライザーが含まれます。 GraalVM を使用すると、さまざまな言語のコンポーネントを組み合わせたアプリケーションを作成できるため、他の言語のコードからオブジェクトや配列にアクセスできるようになります。 JVMベースの言語の場合は、 機会 最小限のメモリ消費で直接実行できるマシンコードにコンパイルされた実行可能ファイルを作成します (メモリとスレッドの管理はフレームワークの接続によって実装されます) 基板VM).

GraalJS の変更点:

  • Node.js 12.10.0 との互換性が保証されています。
  • 非標準のグローバル プロパティと関数はデフォルトで無効になっています。
    global (globalThis に置き換えられ、js.global-property が返されるように設定)、パフォーマンス (js.performance)、print および printErr (js.print);

  • ECMAScript 2020 モード (「-js.ecmascript-version=2020」) で使用できる、Promise.allSettled および Nullish Coalescing プロポーザルを実装しました。
  • 依存関係 ICU4J を 64.2 に、ASM を 7.1 に更新しました。

変更点 GraalPython では:

  • スタブ gc.{enable,disable,isenabled} を追加し、charmap_build、sys.hexversion、および _lzma を実装しました。
  • Python 3.7.8 標準ライブラリを更新しました。
  • NumPy 1.16.4 および Pandas 0.25.0 のサポートを追加しました。
  • timeit サポートを追加しました。
  • socket.socket は、「graalpython -m http.server」を実行して、暗号化されていない (TLS なしの) http リソースをロードできる状態になりました。
  • pandas.DataFrame オブジェクトの表示に関する問題を修正しました。
    bytes.startswith のタプルの処理が正しくありません。
    イテレータの構造化代入と辞書の dict.__contains__ の使用。

  • ast.PyCF_ONLY_AST のサポートが追加されました。 許可された pytest が機能することを確認します。
  • 追加した サポート PEP 498 (リテラル内の文字列補間);
  • 実装済み 「--python.EmulateJython」フラグは、通常の Python インポート構文を使用して JVM クラスをインポートし、Python コードから JVM 例外をキャッチします。
  • パーサーのパフォーマンスの向上、例外キャッシュ、
    JVM コードから Python オブジェクトにアクセスします。 Python コードとネイティブ拡張機能のパフォーマンス テストの結果が向上しました (llvm 上でネイティブ拡張機能を実行すると、ビットコード llvm が JIT コンパイルのために GraalVM に渡されることを意味します)。

変更点 トリュフルビーでは:

  • ネイティブ拡張機能をコンパイルするには、組み込みの LLVM ツールキットが使用され、ネイティブ コードとビットコードの両方が作成されます。 これは、より多くのネイティブ拡張機能がすぐにコンパイルできるようになり、リンクの問題のほとんどが解消されることを意味します。
  • TruffleRuby にネイティブ拡張機能をインストールするための個別の LLVM インストール。
  • TruffleRuby に C++ 拡張機能をインストールする場合、libc++ および libc++abi をインストールする必要がなくなりました。
  • ライセンスは最近の JRuby と同じ EPL 2.0/GPL 2.0/LGPL 2.1 に更新されました。
  • オプションの引数のサポートを GC.stat に追加しました。
  • ラッパーを使用して Kernel#load メソッドを実装し、:chdir を使用して Kernel#spawn を実装しました。
  • rb_str_drop_bytes を追加しました。これは、OpenSSL が使用するため優れています。
  • Rails 6 の新しいレールに必要なプリインストールされた gem の拡張機能が含まれています。
  • ネイティブ拡張をコンパイルするには、MRI と同様にフラグが使用されます。
  • パフォーマンスの最適化が行われ、メモリ消費量が削減されました。

変更点 FastR で:

  • R 3.6.1 との互換性が保証されています。
  • LLVM に基づいてネイティブ拡張機能を実行するための予備サポートが追加されました。 ネイティブ R パッケージを構築する場合、FastR は GraalVM の組み込み LLVM ツールを使用するように構成されます。 結果のバイナリ ファイルには、ネイティブ コードと LLVM ビットコードの両方が含まれます。

    プリインストールされたパッケージもこの方法で構築されます。
    FastR はデフォルトでネイティブ拡張コードをロードして実行しますが、「--R.BackEnd=llvm」オプションを指定して起動するとビットコードが使用されます。 「--R.BackEndLLVM=pkg1,pkg2」を指定することで、一部の R パッケージに対して LLVM バックエンドを選択的に使用できます。 パッケージのインストールで問題が発生した場合は、fastr.setToolchain("native") を呼び出すか、$FASTR_HOME/etc/Makeconf ファイルを手動で編集することで、すべてを元に戻すことができます。

  • このリリースでは、FastR は GCC ランタイム ライブラリなしで出荷されます。
  • メモリリークを修正しました。
  • 大きなベクトル (>1GB) を扱うときの問題を修正しました。
  • grepRaw を実装しましたが、fixed=T のみに適用されます。

出所: オープンネット.ru

コメントを追加します