高性能Ruby
GraalVMのRuby実装であるTruffleRubyで、Rubyコードを高速に実行します。
利点
Rubyコードの高速実行
TruffleRubyは、多くのCPU集約的なベンチマークにおいて、最速のRuby実装です。
Rubyコードの並列実行
TruffleRubyはRubyスレッドを並列に実行し、Rubyコードに対するグローバルインタープリタロックがありません。
C拡張のサポート
データベースドライバなど、多くのC拡張がそのまま動作します。
Java、JavaScript、Python、Rとのオーバーヘッドの低い相互運用性
GraalVM Polyglot APIによって提供されます。
標準Rubyとの高い互換性の維持
TruffleRubyは、標準Rubyランタイム(MRI/CRuby)との完全な互換性を目指しており、JRubyによって提供される追加機能も備えています。
デバッガやモニタリングなどのツールの提供
ツールサポートには、プロファイラ、デバッガ、VisualVMなどが含まれ、複数の言語で動作します。
TruffleRubyとGraalVMによる高速なRuby
Optcarrotベンチマーク
TruffleRuby JVM CEはCRuby 3.0より4.2倍高速、TruffleRuby JVM EEはCRuby 3.0より8.2倍高速です。
Rubykonベンチマーク
TruffleRuby JVM CEはCRuby 3.0より7.3倍高速、TruffleRuby JVM EEはCRuby 3.0より10.6倍高速です。
TruffleRubyは、Shopifyの主要な本番Rubyアプリケーションを、標準のRuby構成からほぼ完全に変更せずに実行できるため、パフォーマンスとツールの真の向上可能性を秘めたRuby実装への移行において、唯一現実的な選択肢となっています。
例の実行
require 'sinatra'
require 'some-c-extension'
get '/' do
CExtensions.work!
end
ネイティブ拡張を含む既存のコードをそのまま実行
TruffleRubyはRailsを実行でき、すべてのRubyGemsテストに合格した実装はCRuby以外ではTruffleRubyだけです。
array = Java.type('int[]').new(4)
array[2] = 42
p array[2]
RubyからのJavaへのアクセス
任意のJVMライブラリを再利用できます。
$ ruby --cpusampler app.rb
Name | Total Time |Opt%|| Self Time |Opt%
----------------------------------------------------------------
Optcarrot::PPU#main_loop |3372ms 64.5%| 98%||1991ms 38.1%| 99%
Optcarrot::PPU#render_pixel| 309ms 5.9%| 80%|| 309ms 5.9%| 80%
$ ruby --inspect app.rb
Debugger listening on ws://127.0.0.1:9229/...
For help, see: https://graalvm.dokyumento.jp/docs/tools/chrome-debugger
E.g. in Chrome open: devtools://devtools/bundled/js_app.html?ws=127.0.0.1:9229/...
組み込みサンプリングプロファイラとデバッガを含む
VisualVM、Flamegraphなども含みます。
$ ruby -ropen-uri -e 'URI.open("https://expired.badssl.com/", &:read)'
cext.rb:1096:in `rb_exc_raise': certificate has expired (OpenSSL::SSL::SSLError)
from openssl/ossl.c:300:in `ossl_raise'
from openssl/ossl_ssl.c:1697:in `ossl_start_ssl'
from openssl/ossl_ssl.c:1755:in `ossl_ssl_connect_nonblock'
from net/protocol.rb:44:in `ssl_socket_connect'
from net/http.rb:1021:in `connect'
from ...
from -e:1:in `main'
C拡張でのバックトレース
GraalVMはRubyとCコードをまとめて実行およびコンパイルできます。
実世界のアプリケーションへの影響
