高性能 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 性能和工具能力的 Ruby 实现的唯一现实选择。
尝试示例
require 'sinatra'
require 'some-c-extension'
get '/' do
CExtensions.work!
end
运行现有代码,无需更改,包括原生扩展
TruffleRuby 可以运行 Rails,并且是除了 CRuby 之外唯一通过所有 RubyGems 测试的实现。
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.java.net.cn/docs/tools/chrome-debugger
E.g. in Chrome open: devtools://devtools/bundled/js_app.html?ws=127.0.0.1:9229/...
包含内置采样分析器和调试器
以及 VisualVM、火焰图等。
$ 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 代码。
为实际应用带来改变
