What’s new in Graal Languages 24.1

原文はこちら。
The original article was written by Alina Yurenko (Developer Advocate for GraalVM, Oracle Labs).
https://medium.com/graalvm/whats-new-in-graal-languages-24-1-b2452c9debae

本日、GraalVM for JDK 23 とともに、Graal Languagesの新しいバージョン 24.1 もリリースします。

Welcome, GraalVM for JDK 23!
https://medium.com/graalvm/welcome-graalvm-for-jdk-23-203928491b2b
https://logico-jp.io/2024/09/25/welcome-graalvm-for-jdk-23/

このバージョンは GraalVM for JDK 23 での使用を想定して設計されていますが、GraalVM for JDK 21 (LTS) とも互換性があります。それでは、今回のリリース内容を見ていきましょう。

また、リリースストリームは以下からご覧いただけます。

First stable release of GraalPy and GraalWasm 🚀

GraalPy と GraalWasm は現在、安定版に到達しました。これらのツールを使用して、本番環境のワークロードを実行できます(Oracle GraalVM によるサポートもご利用いただけます)。GraalPy に関しては、現時点では、純粋な Python コードと Jython のユースケースを優先しています。ご存知かもしれませんが、Java への言語の組み込みは、2つの Maven 依存関係を追加するだけで簡単に行えるようになりました。プロジェクトでの利用開始方法は以下のURLをご覧ください。もしくはデモをお試しになるのもよいでしょう。

Dependency Setup – Embedding languages
https://www.graalvm.org/latest/reference-manual/embed-languages/#dependency-setup
Polyglot Embedding Demo with GraalVM
https://github.com/graalvm/polyglot-embedding-demo

GraalPy 🐍

GraalPy が本番環境での利用が可能な状態に到達しました。

開発は、純粋なPythonコードとJythonのユースケースに重点を置いています。numpyなどのネイティブ拡張を活用する多くのPythonパッケージは動作しますが、その使用はまだ実験的な状態です。コマンドラインオプション--python.WarnExperimentalFeaturesを使用すると、実行時にそのようなモジュールに対する警告を有効化できます。Javaの埋め込みにおいては、警告はデフォルトで有効になっており、contextオプションpython.WarnExperimentalFeaturesfalseに設定することで、警告を抑制できます。

Pythonのバージョンは3.11.7にアップデートされました。

_pickleモジュールは組み込みとなり、開発者の利便性が向上しました。

polyglot.evalは、より意味のある例外を発生させるようになりました。利用できない言語はValueErrorを発生させます。 polyglot 言語からの例外は、直接、相互運用オブジェクト(polyglot.ForeignExceptionとして型付け)として発生します。 言語を指定せずに Python ファイルを実行するショートカットは削除されました。Python コードを実行するには通常のevalを使用してください。

Jython エミュレーションモードでは、非表示のプロパティに対する Python 属性アクセスを使用する場合に、Java のゲッターまたはセッターを呼び出すように自動的に切り替わるようになりました。この動作に依存している場合は、Jython からの移行に役立つ可能性があります。

Jythonエミュレーションを有効にするオプションpython.EmulateJythonは、現在安定版としてマークされており、本番環境でも信頼して使用できます。

また、GraalPyは現在、https://www.graalvm.org/python/wheels/--extra-index-urlというpipオプションのデフォルト値として使用しています。これにより、ソースからビルドする代わりに、一般的なPythonパッケージのビルド済みバイナリをダウンロードできるようになります。今後GraalPyで使用したいパッケージがあればお知らせください。また、Pythonパッケージのメンテナに連絡して、(setup-pythonなどを使って)GraalPyでのテストやwheelのビルドを依頼してみてください。

setup-python
https://github.com/actions/setup-python?tab=readme-ov-file#basic-usage

A demo that uses the `vaderSentiment` Python package in a Micronaut application.
(MicronautアプリケーションでPythonパッケージvaderSentimentを使用したデモ)

GraalJS

  • JavaScript WebAssembly API は現在、GraalJS の安定した機能であり、Oracle GraalVM の一部としてサポートされています。
  • ECMAScript 2024 言語仕様がデフォルトで有効化されました。
  • いくつかの新しい提案が実装されました。

WebAssembly JavaScript Interface
https://www.w3.org/TR/wasm-js-api-1/

Make eval-introduced global vars redeclarable
https://github.com/tc39/proposal-redeclarable-global-eval-vars
Float16Array
https://github.com/tc39/proposal-float16array
Array.fromAsync for JavaScript
https://github.com/tc39/proposal-array-from-async
In-Place Resizable and Growable ArrayBuffers
https://github.com/tc39/proposal-resizablearraybuffer

GraalWasm

安定化に加え、今回のリリースではいくつかの新機能が追加されました。

  • SIMD 提案を実装しました。この機能はデフォルトで有効になっていますが、オプション--wasm.SIMD=falseを指定し無効化できます。

SIMD proposal for WebAssembly
https://github.com/WebAssembly/simd

  • wasi_snapshot_preview1の以下の関数を実装しました。
    • clock_res_get
    • fd_advise
    • fd_datasync
    • fd_fdstat_set_rights
    • fd_filestat_set_size
    • fd_pread
    • fd_pwrite
    • fd_readdir
    • fd_renumber
    • fd_sync
    • fd_tell
Photon running on GraalWasm and GraalJS in a Spring Boot application.
(Spring Bootアプリケーション内でPhotonがGraalWasmとGraalJS上で動作するデモ)

Photon
https://silvia-odwyer.github.io/photon/
Photon with GraalWasm and Spring Boot Demo
https://github.com/graalvm/graalvm-demos/tree/master/graalwasm/graalwasm-photon-spring-boot

Espresso (Java on Truffle)

  • Espressoは現在、TRegexを使用してjava.util.regexのパターンを実行できます。TRegexは標準実装よりも優れたパフォーマンスを提供します。java.UseTRegexを使ってこのエンジンを有効化できます。
  • Java IDE を使用して Truffle 上の Java をデバッグする際のユーザー体験を向上させるため、Java Debug Wire Protocol (JDWP)との互換性に関するいくつかの問題を修正しました。
  • org.graalvm.continuationsパッケージを追加し、継続(continuation)のサポートも追加しました。
  • Espresso VMの継続機能により、プログラムスタックを制御できるようになります。継続が一時停止されると、スタックが巻き戻され、通常のJavaオブジェクトとしてヒープにコピーされます。継続が再開されると、それらのオブジェクトがスタックに戻され、一時停止ポイントで実行を再開するために必要なすべてのメタデータも一緒に戻されます。ヒープオブジェクトはシリアライズされ、同じコードを実行している別のJVMで実行を再開できます(例えば再起動後など)。
  • 詳細は、Espresso Continuationsのドキュメントを参照してください。

Espresso Continuations
https://github.com/oracle/graal/blob/master/espresso/docs/continuations.md

TruffleRuby

  • TruffleRubyはRuby 3.2.4にアップデートされました。
  • 多数の互換性とバグの修正により、パフォーマンスも大幅に改善されました。すべての変更点はリリースノートをご覧ください。

TruffleRuby 24.1.0
https://github.com/oracle/truffleruby/releases/tag/graal-24.1.0

Virtual threads for Graal Languages 🎉

言語コミュニティで非常に期待されていた機能の1つである仮想スレッド(virtual threads)を実装しました。現時点ではこの機能は実験的なものであり、JVMおよびNative Image上で実行されるGraal言語で利用可能です。また、Truffle Unchainedのおかげで、JVMモードのGraalVM for JDK 21でも動作します。Native Imageでは、仮想スレッドごとに1つの物理スレッドを使用します。

Protecting Against Stack Overflows

また、インタプリタにおけるゲストメソッド実行中のスタックオーバーフローを防止するため、engine.InterpreterCallStackHeadRoomというオプションを追加しました。これは、UNTRUSTED polyglot sandboxポリシーのランタイムコンパイル関数エントリーポイントのランダムなオフセットを有効にします。GraalVMはさらに、潜在的なJITスプレー攻撃を防止するトラップ命令の乱数で、関数の開始オフセットをパディングします。

Truly Memory Safe JIT Compilers

Mike Hearnの素晴らしいブログ記事をご覧ください。GraalJSなどのGraal言語で、safety bugのクラス全体がどのようにして排除されるのかについて説明しています。言語のセマンティクスはメモリ安全なインタプリタが定義しており、部分的に評価されるため、生成されるマシンコードも構造上メモリん前になります。

Mike Hearn
https://medium.com/@octskyward
Writing Truly Memory Safe JIT Compilers
https://medium.com/graalvm/writing-truly-memory-safe-jit-compilers-f79ad44558dd
https://logico-jp.io/2024/06/15/writing-truly-memory-safe-jit-compilers-how-to-kill-off-a-top-source-of-browser-exploits/

Community and Ecosystem

GraalJS meets IntelliJ IDEA! ❤️ HTTP Clientで使用されているJavaScript実行エンジンがGraalJSにアップグレードされました。

これにより、IntelliJ IDEAのHTTP Clientでエンドポイントをテストし、.httpファイルでJavaScriptを使用して結果を処理する場合に、ECMAScript 2023仕様の完全サポートを含むGraalJSのすべての機能を使用できるようになりました。

Appleは、Truffleを基盤とした新しい構成言語であるPklを発表しました。これにより、データを定義し、JSON、YAML、プロパティリスト、その他の構成形式の出力を作成できます。

Conclusion

この場を借りて、今回のリリースに寄せられたすべてのフィードバック、ご提案、ご協力に感謝いたします。

このリリースに対するフィードバックや、今後のリリースに欲しい機能の提案がありましたら、Slack、GitHub、Twitterで共有してください。

Slack invitation
https://www.graalvm.org/slack-invitation
GitHub Issues
https://github.com/oracle/graal
Twitter
https://twitter.com/graalvm

コメントを残す

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください