高效能 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,並且是除了 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.dev.org.tw/docs/tools/chrome-debugger
E.g. in Chrome open: devtools://devtools/bundled/js_app.html?ws=127.0.0.1:9229/...
包含內建取樣分析器和除錯器
以及 VisualVM、Flamegraphs 等。
$ 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 程式碼。
為現實世界應用帶來改變
