What’s new in Truffle and Graal Languages

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

本日、GraalVM for JDK 22とともに、TruffleとGraal言語の新バージョン、バージョン24.0もリリースしました。

Welcome, GraalVM for JDK 22!🚀
https://medium.com/graalvm/welcome-graalvm-for-jdk-22-8a48849f054c
https://logico-jp.io/2024/03/21/welcome-graalvm-for-jdk-22/

このバージョンは、JDK 22用のGraalVMで使用するために設計されていますが、LTSのGraalVM for JDK 21とも互換性があります。このリリースの中身を見てみましょう!

Polyglot Embedding

これは、Truffle Unchained以来のリリースなので、Unchainedによって導入された新しい後方互換機能を活用できます。

Truffle Unchained — Portable Language Runtimes as Java Libraries
https://medium.com/graalvm/truffle-unchained-13887b77b62c
https://logico-jp.io/2023/09/21/truffle-unchained-portable-language-runtimes-as-java-libraries/

つまり、このバージョンのTruffleとGraal言語(24.0)を、JDK 21用のGraalVMだけでなく、JDK 22用のGraalVMでも使用できるようになりました。

将来、TruffleとGraal言語の最新バージョンは、最新のLTSリリースと同様に、GraalVM JDKの最新バージョンとの互換性を維持する予定です。これはつまり、GraalVM JDKの現在のLTSリリースのままで、最新のPolyglot言語機能を使用できる、ということです。

下表は将来のバージョンにおける互換性を示したものです。

Truffle backwards compatibility (下線付きのバージョンはLTSリリース)

GraalVM for JDK 21でTruffleとGraal言語24.0を使用する場合は、最新バージョン(現在21.0.2)に更新する必要があることに注意してください。

また、Javaアプリケーションに他の言語を埋め込む方向けに、いくつかの変更を加えました。これらの新機能は次のとおりです。

配列アクセスを改善しました。Value#as(Collection.class)を使用してゲスト言語の配列(Value#hasArrayElements())をJavaのCollectionインターフェイスにマッピングして配列要素にアクセスする機能を追加しました(ゲスト言語の配列をコピーしません)。詳細は以下のIssueを参照してください。

Python collections are not iterable as Java Collections #260
https://github.com/oracle/graalpython/issues/260

Interopバッファは、ホストアプリケーションのbyte[]にマッピングされるようになりました。

FileSystems#allowLanguageHomeAccess()メソッドは廃止され、代わりにFileSystem#allowInternalResourceAccess()が導入されました。互換性を確保するため、両方のメソッドが言語ホームと内部リソースをサポートするようになりました。

その他の変更については、リリースノートとプロジェクトの変更履歴を参照してください。

GraalVM for JDK 22 release notes
https://www.graalvm.org/release-notes/JDK_22/
Change Log – Version 24.0.0
https://github.com/oracle/graal/blob/master/sdk/CHANGELOG.md#version-2400

GraalPy 🐍

Compatibility ✅

GraalPyでより多くのライブラリを利用できるように取り組んでいます。このリリースでは、以下のライブラリのサポートを拡張しました。

  • tensorflow
  • tensorflow-io
  • protbuf
  • llvmlite
  • pydantic-core
  • catboost
  • ray
  • readme-renderer
  • safetensors
  • keras
  • pybind11
  • grpcio
  • PyO3
  • cryptography
  • bcrypt
  • cramjam
  • libcst
  • orjson
  • rpds_py

ぜひお試しの上、フィードバックをお寄せください。そして、GraalPy上で動作させたい他のライブラリを教えてください。

Windowsとの互換性は、GraalPyのユーザーから最もリクエストの多い機能の1つであり、私たちは積極的に取り組んでいます。このリリースでは、Windows上でネイティブの拡張機能を持つパッケージをインストールするためのサポートを追加しました。

GraalPy as a CPython Replacement
https://www.graalvm.org/latest/reference-manual/python/Python-Runtime/

GraalPy on GitHub Actions 🚀

GitHub Actionのsetup-pythonでGraalPyを使えるようになりました。設定方法は以下の通りです。

    - name: Setup GraalPy
      uses: actions/setup-python@v5
      with:
        python-version: graalpy # or graalpy24.1 to pin a version

また、GraalPy上で人気のあるネイティブ拡張機能をビルドするためのレシピをGitHub Actionsの形で提供します。このレシピでは、コミュニティ向けに正しい依存関係でGraalPyのネイティブ拡張機能をビルドするための再現可能な方法を提供します。

Scripts to build wheels for GraalPy
https://github.com/oracle/graalpython/blob/master/scripts/wheelbuilder/README.md

開発者体験に関する別のニュースでは、JavaからJBang経由でGraalPyを簡単に試すこともできます。

JBang
https://www.jbang.dev

コマンドラインから直接スクリプトを実行できます。

jbang hello@oracle/graalpython/release/graal-vm/24.0 "print('Hello GraalPy!')"

JavaにPythonを組み込むより高度な例については、以下のサンプルプロジェクトをご覧ください。

Use GraalPy in a Java embedding with JBang
https://github.com/timfel/graalpy-jbang

A Java and GraalPy application running on JBang

また、GraalVM LLVMランタイム(Sulong)の代わりにシステムツールチェインを使用するように切り替えました。これにより、デフォルトの構成でのフットプリントが減り、C拡張をネイティブに実行するようになります。

すでにGraalPyを使用している場合、もしくはGraalPy初心者であればなおのこと、GraalPyクイックリファレンスをどうぞ。非常に役立つと思います。

GraalPy Quick Reference
https://medium.com/graalvm/graalpy-quick-reference-0488b661a57c
https://logico-jp.io/2023/11/10/graalpy-quick-reference/

GraalPy quick reference

相互運用性に関していくつかの変更があります。詳細はリリースノートをご覧ください。

GraalVM for JDK 22 release notes
https://www.graalvm.org/release-notes/JDK_22

JavaScript and Node.js

非同期イテレータヘルパー (Async Iterator Helpers)、JSON.parseのソーステキストアクセス (JSON.parse source text access)、Well-Formed Unicode Strings、WebAssemblyスレッドなど、いくつかの新しい提案を実装しました。

Async Iterator Helpers : Methods for working with async iterators in ECMAScript
https://github.com/tc39/proposal-async-iterator-helpers
Proposal for extending JSON.parse to expose input source text.
https://github.com/tc39/proposal-json-parse-with-source
a proposal for a method to determine if a String is welll-formed Unicode
https://github.com/tc39/proposal-is-usv-string
Threads and Atomics in WebAssembly
https://github.com/WebAssembly/threads

また、Node.jsでのWebAssemblyサポートがデフォルトで有効になりました。実験的なオプション--js.webassembly=falseを使用すると無効にできます。

TruffleRuby

C/C++拡張はシステムツールチェインを使用してコンパイルされ、GraalVM LLVMランタイム (Sulong) ではなくネイティブで実行されるようになりました。これにより、起動が速くなり、ウォームアップがなくなり、互換性が向上し、配布が小さくなり、C/C++拡張のインストールが速くなりました。

古いパーサーより約2倍高速なPrismパーサーを採用することで、Ruby 3.2とRuby 3.3の構文(パターンマッチングを含む)を完全にサポートするようになりました。

Prism Ruby parser
https://github.com/ruby/prism

その他の変更点は TruffleRuby リリースノートを参照してください。

Truffle Ruby Release Notes
https://github.com/oracle/truffleruby/releases/tag/graal-24.0.0

Community and Ecosystem

Oracle Database に GraalVM を組み込み、JavaScript などの Graal 言語をデータベース内で実行できるようにした MLE (Multilingual engine) についてはご存知かもしれません。JavaScript実行のための同様のモジュールは、現在MySQLでも利用可能です。

Introducing JavaScript support in MySQL
https://blogs.oracle.com/mysql/post/introducing-javascript-support-in-mysql

Appleは最近、新しい設定言語Pklをオープンソース化しました。これは Truffle フレームワーク 🚀 上に構築されています。

Pkl – A configuration as code language with rich validation and tooling.
https://github.com/apple/pkl

TornadoVMを使って、GPU上でPolyglot GraalVM アプリケーションを高速化できます。

Hardware Acceleration for Polyglot Runtimes
https://www.tornadovm.org/post/hardware-acceleration-for-polyglot-runtimes

PolyglotアプリケーションのビルドにIntelliJ IDEAを使用している場合、アノテーションやコメントによって各言語のシンタックス・ハイライトを有効にする簡単な方法があります。IDEAでサポートされているすべての言語で動作します。

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 を使っています。コメントデータの処理方法の詳細はこちらをご覧ください