TruffleRuby
TruffleRubyは、Rubyプログラミング言語のGraalVM高パフォーマンス実装です。
スタート・ガイド
TruffleRubyは、2つのディストリビューションで提供されています:
- ネイティブ・スタンドアロン: これにはネイティブ構成のTruffleRubyのみが含まれます。
- JVMスタンドアロン: これには、JVM構成にTruffleRubyのみが含まれます。これには、Java、JavaScript、Python、WebAssemblyなどの他の言語のサポートが含まれます。
これらのいずれかをインストールできます:
- Rubyマネージャ/インストーラ(RVM、rbenv、chruby、asdf、ruby-build、ruby-install)を使用します。
最新の修正および改善を含むTruffleRuby devビルドを試すことをお薦めします(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
- GitHub Actionsを使用したCIでの、詳細やその他のCIについては、「CIでのTruffleRubyのテスト」を参照してください。
- uses: ruby/setup-ruby@v1
with:
ruby-version: truffleruby # or truffleruby-head or truffleruby+graalvm or truffleruby+graalvm-head
-
Docker経由。ネイティブ・スタンドアロンの場合は、「公式リリース・イメージ」および「ナイトリ・イメージ」を参照してください。JVMスタンドアロンにはまだDockerイメージはありませんが、簡単にダウンロードして、ネイティブ・スタンドアロンDockerfileからインスピレーションを得ることができます。
-
ドキュメントに従って手動で。
通常どおり、gem
およびbundle
を使用してgemをインストールできます。
問題を見つけた場合は、GitHubで報告してください。
目的
TruffleRubyの目的は次のとおりです:
- 自然なRubyコードをより高速に実行する。
- TruffleRubyは、多くのCPU負荷の高いベンチマークで最速のRuby実装です。
- Rubyコードをパラレルに実行する。
- TruffleRubyにはグローバル・インタプリタ・ロックがなく、Rubyコードをパラレルに実行します。
- C拡張機能をサポートする。
- データベース・ドライバを含め、多くのC拡張機能が追加設定なしで動作します。
- Java、JavaScript、Python、WebAssemblyなどの言語との高速かつ低オーバーヘッドの相互運用性を追加する。
- GraalVM提供のポリグロットのドキュメントを参照してください。
- デバッガやモニタリングなど、複数の言語を横断して動作する新しいツールを提供する。
- プロファイラ、デバッガ、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 16.04、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が動作しない場合があります。
依存性
- CおよびC++拡張機能をビルドするためのmakeおよびgcc
openssl
C拡張機能のlibsslpsych
C拡張機能のlibyamlzlib
C拡張機能のzlib
これらの依存性がないと、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実装です。このパフォーマンスを実現するには、ほかの高度なJITコンパイラと同様に、TruffleRubyにかなりのウォームアップが必要です。パフォーマンスの問題が見つかった場合は、このガイドを参照してください。
リリース
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の問題や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-2024 Oracle and/or its affiliates):
- Eclipse Public Licenseバージョン2.0、または
- GNU General Public Licenseバージョン2、または
- GNU Lesser General Public Licenseバージョン2.1。
ライセンス情報の詳細は、LICENCE、3rd_party_licensesおよびdoc/legal/legalを参照してください。
帰属
TruffleRubyには、JRuby (パーサー、JCodings、Joniなど)のインフラストラクチャ・コード、Rubiniusプロジェクトのコア・ライブラリ・コード、およびRubyの標準実装であるMRIのコードが含まれています。