TruffleRuby
TruffleRubyは、Rubyプログラミング言語のGraalVM高パフォーマンス実装です。
スタート・ガイド
TruffleRubyは、2つのディストリビューションで提供されています:
- スタンドアロン: これにはネイティブ構成のTruffleRubyのみが含まれるため、ダウンロードが小さくなります。
- GraalVM: これには、JavaScript、Python、Rなど他の言語のサポートが含まれ、ネイティブ構成とJVM構成の両方がサポートされます。GraalVM内でTruffleRubyを使用するには、Rubyマネージャを使用することをお薦めします。
これらのいずれかをインストールできます:
- Rubyマネージャ/インストーラ(RVM、rbenv、chruby、asdf、ruby-build、ruby-install)を使用します。最新の修正および改善を含むTruffleRuby devビルドを試すことをお薦めします(
VERSION
をdev
に置き換えます)。
スタンドアロン:
RVM: $ rvm install truffleruby
rbenv: $ rbenv install truffleruby-VERSION
asdf: $ asdf install ruby truffleruby-VERSION
chruby: $ ruby-install truffleruby
$ ruby-build truffleruby-VERSION ~/.rubies/truffleruby-VERSION
GraalVM:
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経由。スタンドアロンの場合は、「公式リリース・イメージ」および「ナイトリ・イメージ」を参照してください。GraalVMの場合は、「公式リリース・イメージ」を参照してください。
通常どおり、gem
およびbundle
を使用してgemをインストールできます。
問題を見つけた場合は、GitHubで報告してください。
目的
TruffleRubyの目的は次のとおりです:
- 自然なRubyコードをより高速に実行する。
- TruffleRubyは、多くのCPU集中型ベンチマークに関して最速のRuby実装です。
- Rubyコードをパラレルに実行する。
- TruffleRubyにはグローバル・インタプリタ・ロックがなく、Rubyコードをパラレルに実行します。
- C拡張機能をサポートする。
- データベース・ドライバを含め、多くのC拡張機能が追加設定なしで動作します。
- Java、JavaScript、Python、Rなどの言語との高速かつ低オーバーヘッドの相互運用性を追加する。
- 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
- Ubuntu 16.04、18.04、20.04、22.04 (すべてのLTS)
- Fedora 35、36
- macOS 10.14 (Mojave)、12 (Monterey)
アーキテクチャ:
- AMD64 (別名
x86_64
): サポートされています - AArch64 (
arm64
): Linux (21.2以降)およびmacOS (22.2以降)でサポートされています
/dev/shm
のようなシステム・ファイルシステムをアンマウントするなどして、環境を厳しく制限すると、TruffleRubyが動作しない場合があります。
依存性
- CおよびC++拡張機能をビルドするためのmakeおよびgcc
openssl
C拡張機能のlibsslzlib
C拡張機能のzlib
これらの依存性がないと、RubyGemsを含む多くのライブラリが動作しません。TruffleRubyは、依存性がない場合に適切なエラー・メッセージを出力しようとしますが、これはベスト・エフォート・ベースでのみ行うことができます。
まだ実行していない場合は、UTF-8ロケールも設定する必要があります。
ソースからTruffleRubyをビルドする場合は、コントリビュータ・ワークフローのドキュメントを参照してください。
現在のステータス
gemおよびアプリケーションでTruffleRubyを試す場合は、当チームに連絡することをお薦めします。
TruffleRubyはRailsを実行でき、C拡張機能を含め、多くのgemと互換性があります。ただし、TruffleRubyはまだMRI 3.0と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-2022 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のコードが含まれています。