TruffleRuby

TruffleRubyのロゴ

TruffleRubyは、Rubyプログラミング言語GraalVM高パフォーマンス実装です。

スタート・ガイド

TruffleRubyリリースおよびナイトリ・ビルドをインストールするには、次の4つの方法があります:

最新の修正および改善を含むTruffleRubyナイトリ・ビルドを試すことをお薦めします:

RVM:    $ rvm install truffleruby-head
rbenv:  $ rbenv install truffleruby-dev
chruby: $ ruby-build truffleruby-dev ~/.rubies/truffleruby-dev

詳細は、Rubyインストーラのドキュメントを参照してください。

CIでのTruffleRubyのテストは簡単です。GitHub Actionsでは、次のものを使用できます:

- uses: ruby/setup-ruby@v1
  with:
    ruby-version: truffleruby # or truffleruby-head

詳細および他のCIは、「CIでのTruffleRubyのテスト」を参照してください。

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

問題を見つけた場合は、GitHubで報告してください。

目的

TruffleRubyの目的は次のとおりです:

TruffleRubyのランタイム構成

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

構成: ネイティブ(--native、デフォルト) JVM (--jvm)
TruffleRubyの起動時間 MRIの起動と同じくらい高速 低速
ピーク・パフォーマンスに達するまでの時間 高速 低速
ピーク・パフォーマンス(GCも考慮) 良好 最良
Javaホストの相互運用性 リフレクション構成を必要とする そのままで機能する

使用されているランタイム構成を確認するには、コマンドラインでruby --versionを実行するか、RubyコードでRUBY_DESCRIPTIONまたはTruffleRuby.native?の値を調べます。ランタイム構成の詳細は、「TruffleRubyのデプロイ」を参照してください。

システムの互換性

TruffleRubyは、次のシステムで積極的にテストされています:

アーキテクチャ:

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

依存性

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

また、UTF-8ロケールの設定が必要になる場合もあります。

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

現在のステータス

gemおよびアプリケーションでTruffleRubyを試す場合は、当チームに連絡することをお薦めします。

TruffleRubyはRailsを実行でき、C拡張機能を含め、多くのgemと互換性があります。ただし、TruffleRubyはまだMRI 2.7と100%の互換性があるわけではありません。互換性の問題を見つけた場合は報告してください。TruffleRubyはruby/specの約97%に準拠しており、他の代替Ruby実装を上回っています。

TruffleRubyは、Railsアプリケーションや大規模なプログラムではまだ高速でない可能性があります。特に、現在、大規模なプログラムではTruffleRubyのウォームアップに長い時間がかかり、これに対処するために、TruffleRubyチームが作業中です。大規模なプログラムには、よりパフォーマンス・クリティカルなコードが含まれることが多いため、まだ最適化されていないTruffleRubyの領域に影響を及ぼす可能性が高くなります。

リリース

TruffleRubyのバージョンはGraalVMと同じであり、同時にリリースされます。3か月ごとにリリースされます。リリース・ロードマップを参照してください。

MRIからの移行

ほとんどの場合、TruffleRubyはMRIのドロップイン置換として機能しますが、互換性を確認する必要があります。

JRubyからの移行

多くのユースケースについては、TruffleRubyはJRubyのドロップイン置換として機能します。ただし、Javaとの統合へのアプローチがJRubyとは異なるため、移行ガイドを参照してください。

お問合せ

最も確実に連絡する方法は、GraalVM Slack#trufflerubyチャンネルに参加することです。@TruffleRubyに対してツイートしたり、benoit.daloze@oracle.comに電子メールを送信することもできます。

セキュリティの脆弱性は、GitHubの問題や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です。

セキュリティ

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

ライセンス

TruffleRubyは、次の3つのライセンスのいずれかの条件に基づいて使用できます(copyright (c) 2013-2021 Oracle and/or its affiliates):

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

帰属

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