Experimental feature in GraalVM

TruffleRuby

TruffleRuby logo

TruffleRubyは、GraalVMの高性能なRubyプログラミング言語実装です。

はじめに #

TruffleRubyには2つのディストリビューションがあります

  • ネイティブスタンドアロン: これは、ネイティブ設定のTruffleRubyのみを含みます。
  • JVMスタンドアロン: これは、JVM設定のTruffleRubyのみを含みます。これには、Java、JavaScript、Python、WebAssemblyなどの他の言語のサポートが含まれています。

これらのいずれかをインストールできます

  • Rubyマネージャー/インストーラー (RVM、rbenv、chruby、asdf、ruby-build、ruby-install) を使用します。
    最新の修正と改善を含むTruffleRuby開発ビルドを試してみることをお勧めします ( `VERSION` を `dev` に置き換えます)。

ネイティブスタンドアロン

RVM:    $ rvm install truffleruby # or truffleruby-head
rbenv:  $ rbenv install truffleruby-VERSION
asdf:   $ asdf install ruby truffleruby-VERSION
chruby: $ ruby-install truffleruby
        $ ruby-build truffleruby-VERSION ~/.rubies/truffleruby-VERSION

JVMスタンドアロン

rbenv:  $ rbenv install truffleruby+graalvm-VERSION
asdf:   $ asdf install ruby truffleruby+graalvm-VERSION
chruby: $ ruby-install truffleruby-graalvm
        $ ruby-build truffleruby+graalvm-VERSION ~/.rubies/truffleruby+graalvm-VERSION
- uses: ruby/setup-ruby@v1
  with:
    ruby-version: truffleruby # or truffleruby-head or truffleruby+graalvm or truffleruby+graalvm-head

通常どおり、`gem`と`bundle`を使用してgemをインストールできます。

問題が発生した場合は、GitHubに報告してください。

目標 #

TruffleRubyの目標は次のとおりです

  • 慣用的なRubyコードをより高速に実行する。
  • Rubyコードを並列実行する。
    • TruffleRubyにはグローバルインタプリタロックがなく、Rubyコードを並列に実行します。
  • C拡張機能をサポートする。
    • データベースドライバを含む多くのC拡張機能は、そのまま動作します。
  • Java、JavaScript、Python、WebAssemblyなどの言語との高速で低オーバーヘッドの相互運用性を実現する。
  • 言語間で動作するデバッガーやモニタリングなどの新しいツールを提供する。
    • プロファイラ、デバッガ、VisualVMなどが含まれています。ツールドキュメントを参照してください。
  • 標準のRuby実装との高い互換性を維持しながら、上記すべてを提供する。

TruffleRubyランタイム設定 #

TruffleRubyには、ネイティブとJVMの2つの主要なランタイム設定があり、それぞれにトレードオフがあります。

設定 ネイティブ ( `--native` 、デフォルト) JVM ( `--jvm` )
TruffleRubyの起動時間 MRIの起動とほぼ同じ速さ 遅い
ピークパフォーマンスに達するまでの時間 より速い 遅い
ピークパフォーマンス (GCも考慮) 良い 最高
Javaホストの相互運用性 リフレクション設定が必要 そのまま動作する

使用されているランタイム設定を確認するには、コマンドラインで `ruby --version` を実行するか、Rubyコードで `RUBY_DESCRIPTION` または `TruffleRuby.native?` の値を確認します。ランタイム設定の詳細は、TruffleRubyのデプロイに記載されています。

システムの互換性 #

TruffleRubyは、以下のシステムで活発にテストされています

  • Oracle Linux 7、8、9
  • Ubuntu 18.04、20.04、22.04 (すべてLTS)
  • Fedora 37、38
  • Debian 10、11、12
  • macOS 11 (Big Sur)

アーキテクチャ

  • AMD64 (別名 `x86_64` ): サポート済み
  • AArch64 (別名 `arm64` ): Linux (21.2以降) およびmacOS (22.2以降) でサポートされています

`/dev/shm` などのシステムファイルシステムをアンマウントするなど、環境を厳しく制限すると、TruffleRubyが動作しない場合があります。

依存関係 #

これらの依存関係がないと、RubyGemsを含む多くのライブラリが動作しません。TruffleRubyは、依存関係が不足している場合に適切なエラーメッセージを出力しようとしますが、これはベストエフォートベースでのみ行うことができます。

まだ設定していない場合は、UTF-8ロケールも設定する必要があります.

ソースからTruffleRubyをビルドする場合は、コントリビューターワークフロードキュメントを参照してください。

現在の状態 #

gemやアプリケーションでTruffleRubyを試す人は、必要なヘルプを得るために私たちに連絡することをお勧めします。

TruffleRubyはRailsを実行し、C拡張機能を含む多くのgemと互換性があります。TruffleRubyは、まだMRI 3.2と100%互換性がありません。互換性の問題が見つかった場合は、報告してください。TruffleRubyは、ruby/specの約97%をパスしており、これは他のどの代替Ruby実装よりも多くなっています。

パフォーマンスに関しては、TruffleRubyは、`railsbench`などを含むyjit-benchベンチマークスイートで群を抜いて最速のRuby実装です。このパフォーマンスを実現するために、TruffleRubyは他の高度なJITコンパイラと同様に、かなりのウォームアップを必要とします。パフォーマンスの問題が見つかった場合は、このガイドを参照してください。

リリース #

TruffleRubyはGraalVMと同時にリリースされます。TruffleRubyは、2023年より前のGraalVMと同様に、21.x、22.xなど、カレンダーイヤーに基づくリリース番号を引き続き使用します。リリースロードマップ今後のリリースリストで、リリース日とリリースのサポート期間に関する情報を参照してください。GraalVM Community Editionリリースは、最大1年間サポートされます。長期サポートは、Oracle GraalVMで利用できます。

MRIからの移行 #

TruffleRubyはほとんどの場合、MRIのドロップイン置換として機能しますが、互換性について読んでおく必要があります。

JRubyからの移行 #

多くのユースケースでは、TruffleRubyはJRubyのドロップイン置換として機能するはずです。ただし、Javaとの統合のアプローチはJRubyとは異なるため、移行ガイドを読む必要があります。

連絡先 #

私たちに連絡する最良の方法は、GraalVM Slackの `#truffleruby` チャンネルに参加することです。@TruffleRubyにツイートするか、 _benoit.daloze@oracle.com_ にメールを送信することもできます。

セキュリティの脆弱性は、GitHub issueやGitterでの会話など、公開されている方法ではなく、脆弱性の報告ガイドに記載されているプロセスに従って報告してください。

メーリングリスト #

TruffleRubyを含むGraalVMに関するお知らせは、graal-devメーリングリストで行われます。

作成者 #

最初の貢献順に並べたTruffleRubyの主な作成者は、Chris Seaton、Benoit Daloze、Kevin Menard、Petr Chalupa、Brandon Fish、Duncan MacGregor、Christian Wirth、Rafael França、Alan Wu、Nicolas Laurent、Carol Chen、Nikolay Sverchkov、Lillian Zhang、Tom Stuart、Maple Ongです。

セキュリティ #

セキュリティの脆弱性をOracleに報告する方法については、SECURITYを参照してください。Rubyの既知の脆弱性については、known-cvesファイルを参照してください。

ライセンス #

TruffleRubyは、Oracleおよび/またはその関連会社が著作権(c)2013-2024を所有しており、以下の3つのライセンスのいずれかの条件に基づいて利用可能です。

  • Eclipse Public License version 2.0、または
  • GNU General Public License version 2、または
  • GNU Lesser General Public License version 2.1。

ライセンスの詳細については、LICENCE3rd_party_licenses、およびdoc/legal/legalを参照してください。

謝辞 #

TruffleRubyには、JRuby(パーサー、JCodings、Joniなど)のインフラストラクチャコード、Rubiniusプロジェクトのコアライブラリコード、およびRubyの標準実装であるMRIのコードが含まれています。

お問い合わせ