TruffleRubyの追加機能

TruffleRubyは、他の実装で開発されたプログラムを実行する標準のRuby実装として使用できるように設計されていますが、他の実装の機能を超える追加機能も提供します。

他のRuby実装との互換性については、「互換性」ガイドを参照してください。

TruffleRubyで実行しているかどうかの検出

--versionコマンドライン・オプションを使用できます。TruffleRubyでは、次のように報告されます:

truffleruby ..., like ruby ..., GraalVM CE Native [x86_64-darwin]

Rubyコードでは、標準のRUBY_ENGINE定数('truffleruby')を確認できます。Cコードでは、TRUFFLERUBYが定義されています。

RUBY_ENGINEを確認するかわりに、機能検出を使用することもできます。

TruffleRubyはGraalVMの不可欠な部分であるため、TruffleRubyのバージョン番号は、常に、含まれているGraalVMのバージョンと同じになります。標準JVMなど、GraalVMの外部でTruffleRubyを使用している場合、バージョンは'0.0'になります。GraalVMおよびTruffleRubyのバージョン番号は、標準のRUBY_ENGINE_VERSION定数を使用して確認できます。

TruffleRubyのメソッドおよびクラス

TruffleRubyには、TruffleRubyモジュールの追加機能を提供する、次の非標準のメソッドおよびクラスが用意されています:

アトミック参照

コンカレント・マップ

TruffleRuby::ConcurrentMapは、Hashのようなキーと値のデータ構造で、#hashおよび#eql?を使用してキーとアイデンティティを比較し、値を比較します。Hashとは異なり、順序付けはされていません。TruffleRuby::ConcurrentMapのすべてのメソッドはスレッド・セーフですが、完全に同期化された実装よりも高い並行性を持ちます。concurrent-rubyなどのgemで使用するためのものです。直接使用するのではなく、このgemを介して使用してください。

FFI

TruffleRubyには、Ruby-FFIバックエンドが含まれています。これは透過的である必要があります: 単に通常どおりffi gemをインストールすることで、TruffleRubyのFFIバックエンドが使用されます。TruffleRubyにはFFI gemのデフォルト・バージョンも含まれているため、gemがインストールされていない場合でも、require "ffi"は常にTruffleRubyで動作します。

ポリグロット・プログラミング

PolyglotおよびJavaモジュールは、GraalVMのポリグロット・プログラミング機能へのアクセスを提供します。これらについては、「ポリグロット・プログラミング」ガイドで説明しています。

サポートされていない追加機能

ここにリストされていない、Truffle::POSIXTruffle::FFIなどの興味深いモジュールやメソッドが見つかる場合があります。このドキュメントに記載されていない追加のモジュールおよびメソッドは、TruffleRubyの実装をサポートするように設計されているため、使用しないでください。これらは変更されるか、将来ユーザー・プログラムに表示されなくなる可能性があるため、使用しないでください。

MRIで提供されるもの以外のTruffleRuby C拡張ヘッダーの追加のマクロ、関数、および変数(rb_tr_*で始まるものなど)はサポートされていないため、C拡張機能では使用しないでください。