- 適用於 JDK 23 的 GraalVM (最新)
- 適用於 JDK 24 的 GraalVM (搶先體驗)
- 適用於 JDK 21 的 GraalVM
- 適用於 JDK 17 的 GraalVM
- 封存
- 開發建置
TruffleRuby
TruffleRuby 是 GraalVM 的高效能 Ruby 程式設計語言實作。
開始使用 #
TruffleRuby 有兩種發行版
- 原生獨立版:此版本僅包含 原生組態 中的 TruffleRuby。
- JVM 獨立版:此版本僅包含 JVM 組態 中的 TruffleRuby。這包括對其他語言 (例如 Java、JavaScript、Python 和 WebAssembly) 的支援。
您可以安裝其中一種
- 透過您的 Ruby 管理器/安裝程式 (RVM、rbenv、chruby、asdf、ruby-build、ruby-install)。
我們建議您嘗試 TruffleRuby 開發建置,其中包含最新的修正和改進 (將VERSION
取代為dev
)。
原生獨立版
RVM: $ rvm install truffleruby # or truffleruby-head
rbenv: $ rbenv install truffleruby-VERSION
asdf: $ asdf install ruby truffleruby-VERSION
chruby: $ ruby-install truffleruby
$ ruby-build truffleruby-VERSION ~/.rubies/truffleruby-VERSION
JVM 獨立版
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。如需原生獨立版,請參閱 官方發行映像檔 和 每晚映像檔。如需 JVM 獨立版,目前沒有 Docker 映像檔,但您可以輕鬆地下載它,並從 原生獨立版 Dockerfile 中取得靈感。
-
手動,依照文件執行。
您可以像平常一樣使用 gem
和 bundle
安裝 gem。
請在 GitHub 上回報您可能發現的任何問題。
目標 #
TruffleRuby 的目標是
- 更快地執行慣用的 Ruby 程式碼。
- TruffleRuby 是許多 CPU 密集基準測試中最快的 Ruby 實作。
- 平行執行 Ruby 程式碼。
- TruffleRuby 沒有全域解譯器鎖定,並且可以平行執行 Ruby 程式碼。
- 支援 C 擴充功能。
- 許多 C 擴充功能 (包括資料庫驅動程式) 都能立即使用。
- 新增與 Java、JavaScript、Python 和 WebAssembly 等語言的快速低負擔互通性。
- 由 GraalVM 提供,請參閱多語言文件。
- 提供新的工具,例如跨語言運作的除錯器和監控工具。
- 包括效能分析器、除錯器、VisualVM 等。請參閱工具文件。
- 提供上述所有功能,同時維持與 Ruby 標準實作的高度相容性。
TruffleRuby 執行時組態 #
TruffleRuby 有兩種主要的執行時組態:原生和 JVM,這兩者各有不同的優缺點。
組態 | 原生 (--native ,預設) |
JVM (--jvm ) |
---|---|---|
啟動 TruffleRuby 的時間 | 與 MRI 啟動速度差不多 | 較慢 |
達到效能高峰的時間 | 較快 | 較慢 |
效能高峰 (也考慮到 GC) | 良好 | 最佳 |
Java 主機互通性 | 需要反映組態 | 正常運作 |
若要找出目前使用的執行時組態,請在命令列上執行 ruby --version
,或檢查 Ruby 程式碼中 RUBY_DESCRIPTION
或 TruffleRuby.native?
的值。執行時組態在部署 TruffleRuby 中有更詳細的說明。
系統相容性 #
TruffleRuby 會在下列系統上進行主動測試
- Oracle Linux 7、8、9
- Ubuntu 18.04、20.04、22.04 (所有 LTS)
- Fedora 37、38
- Debian 10、11、12
- macOS 11 (Big Sur)
架構
- AMD64 (又稱
x86_64
):支援 - AArch64 (又稱
arm64
):在 Linux (從 21.2 開始) 和 macOS (從 22.2 開始) 上支援
如果您嚴重限制環境 (例如,卸載系統檔案系統 (例如 /dev/shm
)),您可能會發現 TruffleRuby 無法運作。
相依性 #
- 用於建置 C 和 C++ 擴充功能的 make、gcc 和 g++
- 用於
openssl
C 擴充功能的 libssl - 用於
psych
C 擴充功能的 libyaml - 用於
zlib
C 擴充功能的 zlib
如果沒有這些相依性,許多程式庫 (包括 RubyGems) 將無法運作。如果遺失相依性,TruffleRuby 會嘗試列印易讀的錯誤訊息,但這只能盡力而為。
如果尚未設定,您也需要設定 UTF-8 地區設定。
如果您想要從原始碼建置 TruffleRuby,請參閱貢獻者工作流程文件。
目前狀態 #
我們建議嘗試在 gem 和應用程式上使用 TruffleRuby 的使用者與我們聯絡,以便獲得任何可能需要的協助。
TruffleRuby 可以執行 Rails,並與許多 gem 相容,包括 C 擴充功能。TruffleRuby 尚未 100% 與 MRI 3.2 相容。請回報您可能發現的任何相容性問題。TruffleRuby 通過大約 97% 的 ruby/spec,比任何其他 Ruby 實作都高。
關於效能,在包含 railsbench
等項目的 yjit-bench 基準測試套件上,TruffleRuby 遠遠地是最快的 Ruby 實作。為了達到此效能,TruffleRuby 需要相當多的暖機時間,就像其他進階 JIT 編譯器一樣。如果您發現任何效能問題,請參閱本指南。
版本 #
TruffleRuby 會與 GraalVM 同時發行。TruffleRuby 繼續使用以日曆年度為基礎的版本編號,例如,21.x 和 22.x,與 2023 年之前的 GraalVM 相同。請參閱版本藍圖和即將推出的版本清單,以瞭解發行日期和版本支援時間長度的相關資訊。GraalVM Community Edition 版本最多支援一年。Oracle GraalVM 提供更長的支援。
從 MRI 移轉 #
在大多數情況下,TruffleRuby 應能作為 MRI 的直接替代方案,但您應閱讀我們的相容性。
從 JRuby 移轉 #
對於許多使用案例,TruffleRuby 應能作為 JRuby 的直接替代方案。但是,我們整合 Java 的方法與 JRuby 不同,因此您應閱讀我們的移轉指南。
聯絡方式 #
與我們聯絡的最佳方式是加入 GraalVM Slack 上的 #truffleruby
頻道。您也可以在 Twitter 上發送推文給 @TruffleRuby,或傳送電子郵件至 benoit.daloze@oracle.com。
請透過回報漏洞指南中概述的程序來回報安全性漏洞,而不是透過 GitHub 問題或 Gitter 對話等公開方式回報。
郵件清單 #
關於 GraalVM (包括 TruffleRuby) 的公告會發布在 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,以瞭解如何向 Oracle 回報安全性漏洞。如需 Ruby 中已知的漏洞,請參閱known-cves 檔案。
授權條款 #
TruffleRuby 的版權為 (c) 2013-2024 Oracle 和/或其附屬公司所有,並依照下列三個授權條款中的任何一個授權給您
- 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。